2016-05-20 4 views
0

Работа с приложением, которое должно взаимодействовать с тремя таблицами. Товарные предложения, Сделки, Отклоненные предложения In других случаях: (Доступные продукты), (закупленные продукты), (продукты Отклонено, не интересует.)PHP MySQL Несколько объединений

Предложения Продукт содержит все данные о продукте: (Имя, Desc, Цена, все показано во время сценария)

Я не хочу показывать продукты, если они были куплены или отклонены.

Например:

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

Но когда я пытаюсь добавить второй присоединиться, она больше не работает ... (возможно, я использую неправильно Join сторону? Я честно новичок присоединяется.

$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"; 
+0

Ouch мои глаза, извините, трудно читать, попробуйте добавить 4 пробела перед запросом, я исправлю это для вас в качестве примера. – ArtisticPhoenix

+0

Чтобы ответить, вам кажется, что отсутствует часть 'ON' соединения. И еще много других вопросов. – ArtisticPhoenix

+0

Id использовать 'INNER JOIN' и исправить это' a.' a. что? 'a. *' – ArtisticPhoenix

ответ

0

Смотрите что-то вроде этого

$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 инъекции, но сказать, заглянуть в параметры PDO запроса,

Кстати РЕГИСТРИРУЙТЕСЬ такое же, как INNER JOIN, он просто читает лучше IMO. Вряд ли вам понадобится использовать Right Join. Я добавил AS по той же причине, которую мне нравится использовать INNER JOIN. Последнее я буду знать, что это намеренно, а не опечатка. Просто читаем, но это мое мнение «как» оно работает в любом случае.

+0

Я собираюсь запустить это и вернуться к вам. –

Смежные вопросы