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

标签 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)

如果用户搜索值“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 子句有一个计数来检查是否全部匹配。

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

关于mysql - SQL有很多关联搜索(键,值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34337114/

相关文章:

mysql - Google Cloud SQL - 捕获错误登录

Mysql,复杂 ORDER BY

Mysql 更新查询包含三个表

mysql - 捕捉马甲木偶

mysql - 如何找到不同部门的第n个最高薪水?

mysql - 1432 - 无法创建联合表。数据源连接字符串 %s 的格式不正确

PHP如何将HTML字符串保存到数据库中

php - 如何提取从特定日期算起经过的秒数?

mysql - 如何在sql中选择分解列值

sql - 在 SQL 中使用 SELECT INTO 创建新表