Поиск по связующим таблицам

Drooid

Новичок
Поиск по связующим таблицам

Есть табличка с выставками. Каждая выставка может принадлежать к нескольким категориям. Кроме того, каждая выставка может иметь несколько типов.

В таблицах это выглядить так
exhibits
e_id
e_name

categories
c_id
c_name

types
t_id
t_name

rel_categories
r_exhibit_id
r_category_id

rel_types
r_exhibit_id
r_category_id


Далее собственно проблема: нужно сделать поиск по категориям и типам. Как лучше сделать?
Я вижу два способа..
1. Сначала вытащить в массив двумя sql запросами id тех выставок которые, подходят. и потом в результирующем запросе использовать WHERE e_id IN (".implode(",", $ids).")

2. Второй способ. Сделать что-то вроде
PHP:
SELECT DISTINCT
	e_id,
	e_name
FROM
	exhibits
LEFT JOIN
	rel_categories
ON
	(rel_categories.r_exhibit_id = exhibits.e_id)
LEFT JOIN
	rel_types
ON
	(rel_types.r_exhibit_id = exhibits.e_id)
WHERE
	rel_categories.r_category_id IN (".$categories.")
AND	rel_types.r_type_id IN (".$type.")
Как правильнее?
 

lem

Новичок
Если интересно, вот запос(допустим нам задана категория, нужно отобразить имена выставок):
PHP:
SELECT r_exhibit_id FROM rel_categories WHERE r_category_id = ".$category_id." 
//затем записываем все r_exhibit_id в массив и в цикле 
for(от одного до количества этих e_id) 
SELECT e_name WHERE e_id = ".mass[$i]."
Вообщем, я бы сделал именно так.
 

Drooid

Новичок
хм.. ну это мой 1 способ, только зачем-то еще и запросы в цикле, что явно не хорошо..

-~{}~ 09.04.06 11:16:

Хм.. вот подумал еще.. Сейчас разработка ведется на MySQL 4.0.26.. Может имеет смысл перейти на ветку 4.1, и в данном случае использовать вложенные запросы? Как оптимальнее?
Количество выставок может быть достаточно большим...

-~{}~ 11.04.06 20:27:

Хм.. так никто и не подскажет?
Сам уже склонился ко второму варианту.
 
Сверху