Здравствуйте, есть таблица со значениями характеристик в таком виде:
id_page-----id_field-----value
1-------------11-----------100
1-------------22-----------Платный
1-------------33-----------есть
2-------------11-----------100
2-------------22-----------Платный
2-------------33-----------нет
3-------------11-----------200
3-------------22-----------Платный
3-------------33-----------нет
Задача написать sql запрос для взаимоисключающего фильтра по таблице с такой структурой.
Например человек задал первое условие для фильтрации со значением "Платный" (получил id_page=1,2,3 ) после полученных результатов добавляет еще одно условие для фильтрации по значению "100" (получил id_page=1,2) и добавляет третье условие по значению "есть" ( остается id_page=1)
Вопрос в том как правильно получить такой результат одним sql запросом ?
У меня получился вот такой запрос:
SELECT `id_page` FROM `fields_value` WHERE `value` ='есть' AND `id_page` IN (
SELECT `id_page` FROM `fields_value` WHERE `value` ='100' AND `id_page` IN (
SELECT `id_page` FROM `fields_value` WHERE `value` ='Платные'
)
)
Такой запрос работает правильно и результат показывает верный но насколько такой выход правильный ?
То есть допустим в таблице будет не 3 возможных id_page а скажем 1-2 тысячи а условий для фильтрации не 3 а штук 10, не будет ли такой запрос слишком долгим в подобных условиях ? если вообще выполнится.
Если есть другой вариант то посоветуйте пожалуйста.