Фильтры продуктов WHERE AND или OR ?

Фильтр товаров. У товаров есть, тип опции (например, диагональ экрана, частота процессора...), у типа есть значение (15,6`, 17`, 3Gz, 2Gz...)
Вот так я могу выбрать, например, все Asus:
Product.where("
(option_types.id = 12 AND option_values.id IN (96,100))
")

По диагонали экрана:
Product.where("
(option_types.id = 58 AND option_values.id IN (337,338,340,341))
")

Но это:
Product.where("
(option_types.id = 12 AND option_values.id IN (96,100))
AND (option_types.id = 58 AND option_values.id IN (337,338,340,341))
")

Всегда дает 0 результатов (хотя, по отдельности они работают правильно)
А это:
Product.where("
(option_types.id = 12 AND option_values.id IN (96,100))
OR (option_types.id = 58 AND option_values.id IN (337,338,340,341))
")

Дает неопределенный результат. Например, если первая строчка выбирает все Asus, то в случае, когда их две через OR, то могут появиться и другие бренды.

Я понимаю, что фильтры работают так (когда нажимаются чекбоксы, например):
Внутри типа выбираются все товары, которые отвечают каждому свойству (отмечен Asus -> добавить в выборку все Asus...)
Между типами - исключение (То есть, если выбран Acer, затем - 5GZ, то из первой выборки вычесть те, где не 5Gz...)

Вроде все просто, но уже запутался и не пойму, почему по отдельности запросы работают правильно, а через AND (это ведь обычное логическое И ?) - результат - 0.

P.S. Запросы написал в общем виде, перед ними были еще джойны и т.д.
P.S.S. Я же правильно понимаю, что использовать вместо where inner join нельзя, т.к. выборка - в пределах одной таблицы?
  • Вопрос задан
  • 2429 просмотров
Пригласить эксперта
Ответы на вопрос 1
Able1991
@Able1991
Пишу на рельсах
AND - оператор, отображающий записи, если первое и второе условие является правдой / true
OR - оператор, отображающий записи, если хотя бы одно из двух условий является правдой / true
так что у тебя подход неправильный

так что подумай над своим подходом
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы