Добрый день.
Есть подписки на фильтр.
Таблица с подписками subscriptions: id, email
1, test@ururu.ru
Таблица с возможными фильтрами subscriptions_filters: id, code, name
1, brand, Марка автомобиля
2. model, Модель
3. power_from, Мощность от
Таблица subscriptions_filters_values: id, subscription_id, filter_id, value
1, 1, 1, BMW
2, 1, 2, M5
Если бы мне нужно было найти все подписки, у которых марка автомобиля BMW, модель M5 и мощность 155, то запрос был бы простой.
SELECT * FROM subscriptions as sb
LEFT JOIN subscriptions_filters_values as sfv ON sfv.subscription_id = sb.id
LEFT JOIN subscriptions_filters as sf ON sf.id = sfv.filter_id
WHERE (sf.code = 'brand' and sfv.value = 'BMW') AND (sf.code = 'model' and sfv.value = 'M5') AND (sf.code = 'power' and sfv.value = '155')
Как поступить, если мне надо найти все подписки BMW M5 155 л.с., но и те, у которых некоторые из параметров не заданы? Например подписки на фильтр у которого указано только BMW, без модели и мощности.
UPD:
А хотя даже запрос выше не сработает, так как не правильный. У вас есть варианты? Вообще не знаю как решить, кроме как выбрать все фильтры из БД и на PHP сравнивать...