B
byte255
Здравствуйте, уважаемые программисты!
Подскажите пожалуйста начинающему.
Есть таблица предметов (игрушки)
id name
1 toy_1
2 toy_2
....
аналогичная таблица признаков (id, name)
и связывающая их в отношении многие ко многим таблица
binder
Мне нужно выбрать предметы,
соответствующие одновременно несколько признакам
(например предмет может быть одновременно деревяным, круглым и зеленым)
пока делаю это вот таким вот страшным запросом:
Как бы это сделать по-другому?
Подскажите пожалуйста начинающему.
Есть таблица предметов (игрушки)
id name
1 toy_1
2 toy_2
....
аналогичная таблица признаков (id, name)
и связывающая их в отношении многие ко многим таблица
binder
Код:
toy_id, attr_id
1 1
2 1
3 1
4 1
2 3
2 4
соответствующие одновременно несколько признакам
(например предмет может быть одновременно деревяным, круглым и зеленым)
пока делаю это вот таким вот страшным запросом:
Код:
SELECT q1.id, q1.name FROM
( SELECT DISTINCT bind.toy_id as id,
t.name, bind.attr_id
FROM binder as bind, toys as t
WHERE bind.toy_id = t.id
AND ( bind.attr_id = '4')
) as q1,
( SELECT DISTINCT bind.toy_id as id, bind.attr_id
FROM binder as bind, toys as t
WHERE bind.toy_id = t.id
AND ( bind.attr_id = '1')
) as q2,
( SELECT DISTINCT bind.toy_id as id, bind.attr_id
FROM binder as bind, toys as t
WHERE bind.toy_id = t.id
AND ( bind.attr_id = '3')
) as q3
WHERE q2.id = q1.id AND q3.id = q1.id
Как бы это сделать по-другому?