Есть набор фильтров по категориям:
В БД это выглядит так:

При выборе, например таких параметров:

Если перебирать все property_val_id с логическим или, получаем запрос типа:
SELECT actor_id FROM filters WHERE property_val_id IN (8,10,15,18)
Он работает, но не совсем корректно.
мы получим в выдаче всех рыжих ИЛИ безволосых ИЛИ африканцев ИЛИ худощавых
(как вы понимаете полные африканцы или худощавые белые тоже будут в выдаче)
А нужно чтобы мы получали: (РЫЖИХ ИЛИ БЕЗВОЛОСЫХ) И АФРИКАНЦА И ХУДОЩАВОГО
Помогите пожалуйста разобраться, может быть структура фильтров в общей куче выбрана не верно и нужно разбить (каждой категории отдельная таблица), либо правильно сформировать запрос, потому что запрос типа:
SELECT actor_id FROM filters WHERE property_val_id IN (8,10) AND property_val_id=15 AND property_val_id=18
естественно не дает требуемого результата...
P.S. Фильтры типа пола, локации и возраста находятся в отдельной таблице с самими людьми и работают как часики, склеиваясь в выдаче JOIN'ами, на них не обращайте внимания. Вопрос только по дополнительным фильтрам.