2012-01-13 25 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";