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";
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.