构造MySQL查询(meta_key / meta_value表)

时间:2016-03-19 12:51:57

标签: 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,颜色=红色,价格= 10。我可以通过单个简单查询,没有枢轴等来获得它。

1 个答案:

答案 0 :(得分:3)

我喜欢使用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方法具有可扩展性和可表达性的优势。很容易表达不是简单平等的许多条件(颜色不是红色,在美国或中国制造)。此外,附加条件具有非常相似的性能。

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