正在开发一个需要协作三个表的应用程序。 产品报价、交易、拒绝报价 换句话说:(可用产品)、(已购买产品)、(已拒绝产品、不感兴趣。)
产品报价包含所有产品数据:(名称、描述、价格、while 脚本中显示的任何内容)
我不想展示已购买或被拒绝的产品。
例如:
"Select *
JOIN Whatever
JOIN Whatever
(WHERE NOT IN PURCHASED OR 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";
但是当我尝试添加第二个连接时,它不再起作用...(也许我使用了错误的连接端?老实说,我对连接很陌生。
$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";
最佳答案
看到这样的东西
$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
";
我不会讨论 SQL 注入(inject),但会说查看 PDO 查询参数,
顺便说一句,JOIN 与 INNER JOIN 相同,只是在我看来它读起来更好。您几乎不需要使用右连接。我添加 AS
的原因与我喜欢使用 INNER JOIN
的原因相同。后来我就会知道这是故意的而不是打字错误。只是更具可读性,但这就是我的观点,“因为”无论哪种方式都有效。
关于PHP MySQL 多重连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37337952/