Выборка из СУБД MySQL

Павел Александров

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

Имеется таблица (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 копий каждого огромного текста не является хорошей идеей.

Как можно оптимизировать данную выборку?

1 чел.