2016-10-01 3 views
0

Следующий запрос не возвращает данные. Не могу понять, почему. Удаление одного из соединений работает, но я не могу получить данные из одной таблицы.3 Таблица SQL JOIN не возвращает данные

$productInfo = "SELECT stock.*, s_list.*, c_list.* 
       FROM stock 
       INNER JOIN s_list 
       ON stock.s_compo_id = s_list.id 
       INNER JOIN c_list 
       ON stock.c_compo_id = c_list.id 
       WHERE batch_id = '$productID'"; 
+0

Если вы используете подготовленный оператор, то выполните одиночные кавычки вокруг productId. – SMA

+0

Потому что могут быть не соответствующие данные. Измените 'Inner Join' на' Left Join' и посмотрите, какое условие вы получите 'null' – Utsav

+0

Либо ваши условия' join' являются неправильными, либо никакие записи не соответствуют условиям соединения, или никакие товары не соответствуют 'batch_id'. Вам необходимо предоставить образцы данных и желаемые результаты. –

ответ

0

Это ваш запрос:

SELECT stock.*, s_list.*, c_list.* 
FROM stock INNER JOIN 
    s_list 
    ON stock.s_compo_id = s_list.id INNER JOIN 
    c_list 
    ON stock.c_compo_id = c_list.id 
WHERE batch_id = '$productID'"; 

Вот некоторые причины, по которым я легко думать, что вы не получите никаких данных:

  • batch_id и $productID не совпадают. Имена разные, так почему я должен думать, что они ссылаются на одно и то же?
  • Либо s_list, либо c_list (или оба) не имеют соответствующих записей. Вы делаете внутренние соединения, поэтому никакие совпадающие записи не означают, что строки не возвращаются.
  • Вы получаете строки, но столбцы имеют одинаковые имена в двух таблицах. Например, вы, вероятно, увидите столбец id на своем выходе, и не ясно, из какой таблицы он исходит. Явно перечислите нужные столбцы и дайте им уникальные псевдонимы.

И, менее вероятно, потому, что именование выглядит правильно:

  • Соединить условия для одного или обоих join s не правильно, так что ничего не соответствует.

И, обязательное уведомление о том, что вы не должны помещать переменные непосредственно в строки запроса. Используйте параметры. Это не только безопаснее, но и дает двигателю возможность кэшировать план запроса, экономя усилия при вызове несколько раз.

0

Попробуйте выполнить нижеследующий запрос.

$productInfo = "SELECT stock.*, s_list.*, c_list.* 
      FROM stock 
       LEFT JOIN s_list 
       ON stock.s_compo_id = s_list.id 
       LEFT JOIN c_list 
        ON stock.c_compo_id = c_list.id 
      WHERE batch_id = '$productID'"; 
Смежные вопросы