我有两张桌子:
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)
如果用户搜索“宝马”和“意甲1”的值,则他应该只有ID为1的广告
答案 0 :(得分: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
子句的key
/ value
对与or
相关联。 having
子句有一个计数来检查所有匹配。
注意:values
和key
是MySQL中的保留字,因此对于表或列名称来说,它是一个糟糕的选择。同样,允许使用value
,但最好使用不同的名称。我没有逃过这些值,因为我认为它们实际数据确实不同。