
Здравствуйте!
Имеется таблица (Objects) с объектами, разных типов (поле type).
И таблица описаний этих объектов (Descriptions).
Нужно получить список объектов определённого типа (пусть будет type = 1) и их описание для данной ситуации.
У каждого объекта имеется несколько разных описаний (также поле type).
Получим описание 2-ого типа.
В таблице Descriptions PK является id + type,
где id совпадает с id Объекта,
а Descriptions.type и Objects.type - разные вещи.
Для этого использую следующий запрос:
SELECT id, description
FROM
(SELECT id FROM Objects WHERE type = 1) as t1
INNER JOIN Descriptions USING(id)
WHERE type = 2;
Но есть объекты, где type = 2, отсутсвует в таком случае нужно использовать описание по умолчанию (пусть будет type = 1)
Запрос преобразуется в
SELECT id, description, type
FROM
(SELECT id FROM Objects WHERE type = 1) as t1
INNER JOIN Descriptions USING(id)
WHERE type IN (1, 2);
А дальше можно на PHP выбрать type = 2, а если его нет, то взять type = 1.
Но можон ли сделать тоже самое на SQL?
Проблема в том, что таких объекдинений INNER JOIN должно происходить 5, а может и более раз (в дальнейшем).
И если после первого запроса для каждой записи мы получаем по 2 строчки, то после 5-ого их будет 32.
А эти поля (description и подобные в других 4 таблицах) имеют текстовый формат и иметь по 16 копий каждого огромного текста не является хорошей идеей.
Как можно оптимизировать данную выборку?



