как можно по другому обойти подобный запрос

_Leonchik_

Новичок
как можно по другому обойти подобный запрос

Подскажите как элегантно избавится от подобного (некрасивого) запроса
2 таблицы:
1 - перечень айтимов ITEMS (id_item, cat_id, name) подчиненных категории
2 - связки между ними TAB_2 (id, id_item_1, id_item_2) - где id_item_1 - это хозяин данной связки.

Необходимо вывести категории со списком входящих в нею Items-ов кот, имеют пару. допустим искомый Items под номером 55
надо найти его пару в TAB_2
PHP:
SELECT *
FROM `Category` AS Cat
INNER JOIN  `ITEMS` AS It USING (cat_id)
LEFT JOIN ` TAB_2` AS T2 ON (It. id_item= T2.id_item_1  AND T2.id_item_2 = 55)
 OR (It. id_item = T2.id_item_2  AND T2.id_item_1 = 55)
WHERE Cat.cat_id = 10
2 вар: 2 раза заджойнить таблицу TAB_2 сначало по id_item_1, потом по id_item_2

Но ума не приложу что из них лучше (оптимизированней).

Возможны ли др. пути реализации?

-~{}~ 13.02.07 14:53:

единственное что я пока понимаю, что при (вар. 2) он на первом джойне считывает данные только один раз. На втором уже нет.

вар.1 я так понимаю плох тем, что ему придется считывать всю таблицу. что и показывает EXPLAIN
Что скажете? есть мысли?
 

_Leonchik_

Новичок
alpine -
при больших количествах записей в базе, что все же лучше?

Видимо придется заполнить базу по самое нихачю, и проверять.
Иначе так никто и не сможет сказать что лучше.
Всем Удачи!
 
Сверху