SQL有很多关联搜索(键,值)

时间:2015-12-17 14:34:05

标签: mysql sql

我有两张桌子:

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的广告

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子句有一个计数来检查所有匹配。

注意:valueskey是MySQL中的保留字,因此对于表或列名称来说,它是一个糟糕的选择。同样,允许使用value,但最好使用不同的名称。我没有逃过这些值,因为我认为它们实际数据确实不同。