2012-01-13 29 views
0

這個MySQL選擇COL多次爲表結構:爲不同的值

ID PID KEY VALUE 
1 2 CITY NEW YORK 
2 2 COUNTRY UNITED STATES 
3 2 STATE NEW YORK 
4 1 CITY NEW JERSEY 

等.. 我要的是讓/過濾像

Where (KEY = CITY and VALUE = NEW YORK) 
     AND (key = country AND VALUE= UNITED STATES) 

的結果這是返回空行!

+0

你還指望它返回? – 2012-01-13 06:12:16

+0

如果我只搜索具有「國家/地區」=「美國」的結果,則有許多國家和城市我想要獲得特定結果國家/地區=美國和城市=紐約 – mahaidery 2012-01-13 06:17:24

+0

如果我使用哪裏(KEY = CITY和VALUE =紐約) OR(key = country和value = UNITED STATES)它的工作原理,但返回所有美國數據 – mahaidery 2012-01-13 06:20:53

回答

1

你需要一個自我JOIN

SELECT t1.* 
FROM my_table t1 
INNER JOIN my_table t2 ON t1.pid = t2.pid 
WHERE t1.key = 'city' and t1.value = 'new york' 
    AND t2.key = 'country' and t2.value = 'united states'; 
+0

可以有不同的方法來獲得這些結果嗎?我的意思是假設你不允許上述查詢!for例如:你在每個迴路的foreach($ SEARCH_TERMS爲$ K => $ v)的{ \t \t \t \t $術語= addslashes_gpc($ v); \t \t \t \t \t \t \t \t \t \t \t \t \t \t $ search。=「{$ searchand}(m.value LIKE'{$ n} {$ term} {$ n}'AND m.meta_key LIKE'{$ n} {$ k} {$ n}')」 ; \t \t \t \t \t \t \t \t $ searchand = '和'; \t \t \t \t \t \t} – mahaidery 2012-01-13 06:42:42

+0

$ SEARCH_TERMS [ '國家'] = $ _ GET [ '國家']; $ SEARCH_TERMS [ '狀態'] = $ _ GET [ '狀態']; – mahaidery 2012-01-13 06:45:14

+0

@ user1147048:對不起,在評論中閱讀代碼很難。你可以發佈它的pastebin或類似的東西? – 2012-01-13 06:47:50

0

因此,您有一張表,其中不同類型的值被保存在同一列中,並帶有一個標識每個集合(PID)的字段。那是對的嗎?

如果真是這樣,那麼你會需要一個在這裏自聯接:

SELECT 
    DISTINCT cityTable.PID 
FROM 
    tableName AS cityTable 
JOIN 
    tableName AS countryTable 
    ON cityTable.PID = countryTable.PID 
WHERE 
    cityTable.key = "city" 
    AND 
    cityTable.value = "NEW YORK" 
    AND 
    countryTable.key = "country" 
    AND 
    countryTable.value = "UNITED STATES";