Как сделать MySql выборку из несколькиз таблиц?

Здравствуйте.

Есть такая схема таблиц:
618413c76a805628452107.png

Нужно:
Составить запрос так, чтобы отобрать все записи из таблицы Resources со значениями из таблицы Variable_values.

Результат должен выглядеть примерно так:
resource
----id
----title
----variables
--------variable
------------id
------------title
------------values
----------------value
----------------value
----------------value
--------variable
------------id
------------title
------------values
----------------value
----------------value
----------------value
--------variable
------------id
------------title
------------values
----------------value
----------------value
----------------value
----childs
--------resource
------------id
------------title
------------variables
----------------variable
--------------------id
--------------------title
--------------------values
------------------------value
------------------------value
------------------------value
------------childs
и т.д.


Таблица Resources древовидная. Глубина не ограничена. Но для моей задачи мне нужно выбрать все записи, у которых соблюдены такие условия и вложенность:
Запись с шаблоном Модель
----Запись с шаблоном Дизайн модели
--------Запись с шаблоном Серия дизайна

То есть глубина вложенности 3. id шаблонов известны изначально.

С этой задачей я могу справиться так:
SELECT * FROM Resources AS Models
LEFT JOIN Resources AS Designs ON Designs.parent_id = Models.id
LEFT JOIN Resources AS Batches ON Batches.parent_id = Designs.id
WHERE Designs.template_id = id шаблона дизайна модели
AND WHERE Batches.template_id = id шаблона серии дизайна


А вот дальше как присоединить переменные (Variables) и их значения (Variable_values) не понимаю. Джойнить выходит очень накладно по времени выполнения запроса.

Запрос хотелось бы иметь всего один, так как необходимо использовать LIMIT на выборку, а также разные условия для выборки (Where).

Подскажите, пожалуйста, какие варианты вы видите.
  • Вопрос задан
  • 101 просмотр
Пригласить эксперта
Ответы на вопрос 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
SELECT * FROM Resources AS Models
LEFT JOIN Resources AS Designs ON (Designs.parent_id = Models.id AND Designs.template_id = id шаблона дизайна модели)
LEFT JOIN Resources AS Batches ON (Batches.parent_id = Designs.id AND Batches.template_id = id шаблона серии дизайна)
WHERE Models.parent_id IS NULL
AND Designs.id IS NOT NULL
AND Batches.id IS NOT NULL


Теперь приклеивайте к этому запросу JOIN-ы из переменных.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы