php - 构建 MySQL 查询(meta_key/meta_value 表)

标签 php mysql sql

我有这样的表:

id | meta_key | meta_value
-------------
1 | color | red
1 | price | 10
2 | color | red
2 | price | 20
3 | color | blue
3 | price | 10

如何获得所有唯一 ID 为 color=red 和 price=10 。我可以通过单个简单查询获得它吗?没有枢轴等。

最佳答案

我喜欢使用 group byhaving 来处理这些问题:

select id
from t
where (meta_key = 'color' and meta_value = 'red') or
      (meta_key = 'price' and meta_value = '10')
group by id
having count(distinct meta_key) = 2;

另一种方法是join。如果 id 没有重复值:

select id
from t tc join
     t tp
     on tc.id = tp.id and
        tc.meta_key = 'color' and tc.meta_value = 'red' and
        tp.meta_key = 'price' and tp.meta_value = '10';

group by 方法具有可扩展性和可表达性的优点。很容易表达许多不是简单相等的条件(颜色不是红色,在美国或中国制造)。此外,附加条件具有非常相似的性能。

第二个可能在一些条件下表现更好(使用正确的索引)。

关于php - 构建 MySQL 查询(meta_key/meta_value 表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36101969/

相关文章:

php - 在 JS 处理程序或 PHP ajax 函数中为 ajax 函数生成 html 更好吗?

php - 如何确保文件路径位于给定的子目录中?

mysql - 更改密码散列(单向加密)功能

mysql - 通过 MySQL 从数据库中检索缺失的日期

php - 在 Laravel 中创建数据库约束断言

php - 选择一列中存在但所有其他列中不存在的值

php - 将 php $_GET ['' ] 与 Javascript 函数结合起来

php - PHP从单独的文件检查空值

php - MySQL : How to set default value for empty row?

sql - 如何在运行总计达到零的帐户上应用状态