LEFT JOIN из нескольких таблиц

88
19 августа 2019, 06:40

Есть простая переменная:

$productId = 1;

Также есть 3 таблицы.

Product_Document (словарь ProductID - DocumentID)

| ProductID | DocumentID |
|-----------+------------|
| 1         | 20         |

Document_IndicNozology (словарь DocumentID - NozologyCode)

| DocumentID | NozologyCode |
|------------+--------------|
| 20         | B24..        |

И таблица Nozology, где хранится нужная информация

| NozologyCode | NozologyContent  |
|--------------+------------------|
| B24..        | Описание болезни |

Возможно ли с помощью LEFT JOIN и переменной $productId в один запрос получить нужную информацию из третьей таблицы? Я пробовал получить данные следующим образом:

$request = "SELECT * FROM Nozology 
LEFT JOIN Document_IndicNozology ON Document_IndicNozology.NozologyCode = Nozology.NozologyCode 
LEFT JOIN Product_Document ON Product_Document.DocumentID = Document_IndicNozology.DocumentID 
WHERE Product_Document.ProductID = $productId";

Но это к сожалению ничего не дало (не возвращается никаких данных).

Answer 1

Общие рекомендации по решению вопросов такого плана.

  1. Забыть про РНР
  2. Поставить себе phpmyadmin
  3. тренироваться на кошках, пока не получится идеально работающий запрос
  4. Только после этого взять полученный SQL, и аккуратно скопировать в РНР код.

Пункт 3 также должен быть разбит на подпункты. у нас три таблицы и два джойна. - Значит сначала делаем три ПРОСТЫЕ селекта с WHERE в каждую таблицу по отдельности, и убеждаемся, что данные там есть. - После этого делаем джойн первых ДВУХ таблиц, и смотрим, вернул ли но что- либо - после этого делаем джойн вторых двух таблиц, и смотрим то же самое - и только после этого делаем джойн всех трех

Момент, на котором этот план перестанет работать, покажет причину, по которой не работает весь запрос. В этом случае надо проверять конкретные данные в таблицах.

Answer 2

Решение вопроса:

$request = "SELECT * FROM Product_Document 
LEFT JOIN Document_IndicNozology ON Document_IndicNozology.DocumentID = Product_Document.DocumentID 
LEFT JOIN Nozology ON Nozology.NozologyCode = Document_IndicNozology.NozologyCode 
WHERE Product_Document.ProductID = $productId";
READ ALSO
update with inner select

update with inner select

Есть таблица в которую по условию нужно проставить "флаг" но для этого нужно выбрать данные еще из нескольких таблиц:

100
SQL пересечение date

SQL пересечение date

имеется в таблицe result записи Например:

113
Slick slider overflow

Slick slider overflow

подскажите пожалуйста, как решить проблему с overflow у слайдера(обрезает картинки с отрицательным позиционированием), если меняю overflow у слик...

127
Аккордеон, получение всегда первый Id. ASP.NET Core and Ajax

Аккордеон, получение всегда первый Id. ASP.NET Core and Ajax

При нажатии на любое сообщения из списка, получает всегда id того элемента который стоит первыйПочему?

95