我有这两个表:
ads(id, title)
values(id, key, value, ad_id)
我想要所有具有多种键/值组合的“广告”
ads(1, 'Hello #1')
ads(2, 'Hello #2')
ads(3, 'Hello #3')
ads(4, 'Hello #4')
values(1, 'brand', 'BMW', 1)
values(2, 'model', 'serie 1', 1)
values(3, 'brand', 'BMW', 2)
values(3, 'model', 'serie 2', 2)
如果用户搜索值“BMW”和“Serie 1”,他应该只会看到 ID 为 1 的广告
最佳答案
实现此目的的一种方法是使用条件聚合:
select ad_id
from values v
where key = 'brand' and value = 'BMW' or
key = 'model' and value = 'serie 1'
group by ad_id
having count(*) = 2;
where
子句具有通过 or
连接的key
/value
对。 having
子句有一个计数来检查是否全部匹配。
注意:values
和 key
是 MySQL 中的保留字,因此对于表名或列名来说这是一个糟糕的选择。同样,value
是允许的,但最好使用不同的名称。我没有转义这些值,因为我认为它们在您的实际数据中确实有所不同。
关于mysql - SQL有很多关联搜索(键,值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34337114/