我有一个需要在数据库中获取某些过滤器的应用程序。过滤器是一组A
,B
和C
,即:
A = 1 and B = 2 and C = 3
每个过滤器都有一个值,一个特征和一个类别(由A
,B
和C
表示),即:
category = 'dimension' and characteristic = 'width' and value = 10
category = 'color' and characteristic = 'background' and value = 'red'
为了这篇文章,数据有点过于复杂,但我们可以假设过滤器总是三重奏:
Filter :
category
characteristic
value
我需要从数据库中获取一定数量的过滤器。当过滤器应用于产品时,我拥有的过滤器越多,我必须找到的产品就越少。
我的第一个方法是做一些事情:
(A = 1 and B = 2 and C = 3) or
(A = 4 and B = 5 and C = 6)
但是使用之前的条件,结果已扩展且不受限制(过滤器必须相互添加)。
新尝试给了我:
(A = 1 and B = 2 and C = 3) and
(A = 4 and B = 5 and C = 6)
但是这显然没有返回任何内容,因为查询尝试A = 1 and A = 4
。
这是一个表达我搜索内容的图表:
当我使用or
尝试查询时,我得到了(1)
和(2)
的全部内容。
select * from products where ( category = 'dimension' and characteristic = 'width' and value = 10 ) or ( category = 'color' and characteristic = 'background' and value = 'red' )
当我使用and
尝试查询时,我得不到(1)
和(2)
。
select * from products where ( category = 'dimension' and characteristic = 'width' and value = 10 ) and ( category = 'color' and characteristic = 'background' and value = 'red' )
所以解决方案是做一些查询然后加入它们:
select where (A = 1 and B = 2 and C = 3) (1)
select where (A = 4 and B = 5 and C = 6) (2)
select (1) join (2)
这样我获得了所有(1)
和(2)
,但我只保留了两个子查询中的产品。
但是我认为这个解决方案可行,我无法使用Active记录构建此类查询。两个主要问题是:
您有任何想法/链接推荐吗?
谢谢,
答案 0 :(得分:0)
我发现,使用MySQL数据库,我可以简单地执行“OR”条件,然后仅过滤重复条目,如下所示:
SELECT * FROM products WHERE
(category = 'dimension' AND characteristic = 'width' AND value = 10 )
OR (category = 'color' AND characteristic = 'background' AND value = 'red')
GROUP BY id
HAVING count(*) > 0