@PiloTeZ
...

Как найти записи с подходящими параметрами?

Добрый день.
Есть подписки на фильтр.

Таблица с подписками 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 сравнивать...
  • Вопрос задан
  • 78 просмотров
Решения вопроса 1
@res2001
Developer, ex-admin
Запрос у вас не правильный потому что в where противоричие - как sf.code может быть одновременно и brand и model и т.д. в одной записи?
Чтоб сделать его правильным нужно между скобок поставить OR, а не and.
Для неполного условия просто уберите из запроса скобку с соответствующим условием.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы