duanjia3187 2016-05-20 04:28
浏览 29

PHP MySQL多个连接

Working on an application that needs to collaborate three tables. Product Offers, Transactions, Declined Offers In otherwords: (Available Products), (Purchased Products), (Products Declined, Not interested.)

Product Offers Contains All product data: (Name, Desc, Price, anything shown during the while script)

I don't want to show products if they have been purchased or declined.

For instance:

"Select * 
               JOIN Whatever
               JOIN Whatever
               (WHERE NOT IN PURCHASED OR DECLINED)";

I have a working code, for showing where not declined:

$products= "SELECT a.*, b.pID, b.userID, a.pID as pID FROM products a                   
                  LEFT JOIN declined_products b ON (a.pID = b.pID AND b.lenderID = '$userID')
                  WHERE b.pID is NULL AND b.userID is NULL
                  LIMIT $start, $maxres";

But when I try to add the second join, it no longer works... (maybe I'm using the wrong Join side? I am honestly new to joins.

$products= "SELECT a.*, b.*, c.*, a.pID as pID FROM products a                   
                  LEFT JOIN declined_products b ON (a.pID = b.pID AND                     b.lenderID = '$userID')
                  RIGHT JOIN p_transactions c ON (c.product = a.pID AND c.user_id = '$userID')
                  WHERE b.appID is NULL AND b.userID is NULL AND c.user_id <> '$userID' AND (`c.callback` != '1' or `c.callback` is NULL)
                  LIMIT $start, $maxres";
  • 写回答

1条回答 默认 最新

  • dongsou4301 2016-05-20 04:39
    关注

    See something like this

    $products= "
    SELECT a.*,
        b.*,
        c.*,
        a.pID as pID
    FROM
        products AS a
    LEFT JOIN
        declined_products AS b ON (a.pID = b.pID AND b.lenderID = '$userID')
    INNER JOIN
        p_transactions AS c ON (c.product = a.pID AND c.user_id = '$userID')
    WHERE
            b.appID is NULL
        AND
            b.userID is NULL
        AND
            c.user_id <> '$userID'
        AND
            (c.callback != '1' or c.callback is NULL)
        LIMIT $start, $maxres
    ";
    

    I won't get into sql injection but to say look into PDO query parameters,

    By the way JOIN is the same as INNER JOIN, it just reads better IMO. Hardly ever will you need to use a Right Join. I added AS in for the same reason I like to use INNER JOIN. Latter I will know it's intentional and not a typo. Just more readable, but that is my Opinion 'as' it works either way.

    评论

报告相同问题?

悬赏问题

  • ¥15 BP神经网络控制倒立摆
  • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
  • ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算