Это ваш запрос:
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 не правильно, так что ничего не соответствует.
И, обязательное уведомление о том, что вы не должны помещать переменные непосредственно в строки запроса. Используйте параметры. Это не только безопаснее, но и дает двигателю возможность кэшировать план запроса, экономя усилия при вызове несколько раз.
Если вы используете подготовленный оператор, то выполните одиночные кавычки вокруг productId. – SMA
Потому что могут быть не соответствующие данные. Измените 'Inner Join' на' Left Join' и посмотрите, какое условие вы получите 'null' – Utsav
Либо ваши условия' join' являются неправильными, либо никакие записи не соответствуют условиям соединения, или никакие товары не соответствуют 'batch_id'. Вам необходимо предоставить образцы данных и желаемые результаты. –