Фильтр товаров. У товаров есть, тип опции (например, диагональ экрана, частота процессора...), у типа есть значение (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 нельзя, т.к. выборка - в пределах одной таблицы?