2012-02-29 67 views
0

我试图写这样的查询,但似乎无法去解决它之间:MYSQL多重键,值,查询

WHERE 
    (
     meta_key = 'key' 
     AND 
     meta_value = 'value' BETWEEN min_value AND max_value 
    ) 
    AND 
    (
     meta_key = 'different_key' 
     AND 
     meta_value = 'different_value' BETWEEN different_min_value AND different_max_value 
    ) 

换句话说,我要检查,如果一个键的值在两个数字之间,另一个键的值在两个其他数字之间。

当我使用OR运算符时,它返回两个相同的项目,当我只想要一个。

非常感谢帮助!

+0

“它返回两个相同的项目,当我只需要一个。” - - 是不可能的。每行只能返回一次,用于无连接的简单查询 – zerkms 2012-02-29 08:57:02

回答

1

您需要连接两次表以测试2行上的2个不同条件。在EAV设计中这是常见的(有很多连接):

FROM 
    tableX AS a 
    JOIN 
    tableX AS b 
     ON b.identifyingColumn = a.identifyingColumn 

WHERE 
    (
     a.meta_key = 'key' 
     AND 
     a.meta_value BETWEEN min_value 
         AND max_value 
    ) 
    AND 
    (
     b.meta_key = 'different_key' 
     AND 
     b.meta_value BETWEEN different_min_value 
         AND different_max_value 
    ) 
+0

噢,它是关于EAV:-S另一个证明,如果您选择了EAV来解决您的任务 - 您已经非常错误 – zerkms 2012-02-29 09:03:03

+0

@zerkms:我认为Wordpress使用这些名称('meta_key','meta_value'),但它可能是其他一些EAV设计。 'meta_'名称是很好的指标。 – 2012-02-29 09:08:34

0

它不能与AND。因为一行对同一列不能有不同的值。

我想你应该去UNION查询或self join