2012-02-29 62 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