Добрый день.
Есть две таблицы:
itemsitem_id | item_name | ...
item_flagsitem_id | flag_name | flag_value
Нужно получить все items, у которых включены некоторые flags (сразу два).
Сейчас это делается так:
SELECT * FROM items
JOIN item_flags as f1 ON (items.item_id = f1.item_id)
JOIN item_flags as f2 ON (items.item_id = f2.item_id)
....
WHERE
( f1.flag_name = '...' AND f1.flag_value = '...' ) AND
( f2.flag_name = '...' AND f2.flag_value = '...' )
...
GROUP BY items.item_id
То есть, для каждого следующего флага делается новый JOIN, а потом всё это группируется по итему.
Но мне кажется, что это какая-то очень глупая и неправильная схема, и можно сделать проще.