Здравствуйте.
Есть такая схема таблиц:
Нужно:
Составить запрос так, чтобы отобрать все записи из таблицы 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).
Подскажите, пожалуйста, какие варианты вы видите.