Mysql为不同的值多次选择COL

Mysql为不同的值多次选择COL,mysql,select,Mysql,Select,这是表结构: 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) 这是返回空行 您需要一个self加入 SELECT t1

这是表结构:

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)

这是返回空行

您需要一个self
加入

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';

因此,在同一列中有一个包含不同类型值的表,其中有一个字段标识每个集合(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";

你希望它返回什么?有很多国家和城市,如果我只搜索包含Country=United States的结果,它工作得非常完美。如果我使用Where(KEY=City and VALUE=New YORK)或(KEY=Country and VALUE=United States),我想得到国家=美国和城市=纽约的具体结果它可以工作,但返回所有美国数据。为什么要将它们作为不同的行而不是不同的列?啊,是的,去过那里,做到了。看看我的答案。有没有其他方法可以得到这些结果?我的意思是假设你不被允许进行上述查询!例如:你在foreach($k=>v)的每个循环中,{$term=addslashes\u gpc($v);$search.=“{$searchand}(m.value如{$n}{$term}{$n}和m.meta_键如{$n}{$k}{$n}”;$searchand='和}$searchu-terms['country']=$$搜索词['state']=$\u获取['state']@user1147048:抱歉,在评论中读代码太难了。你能把它贴到pastebin或者类似的东西上吗?在这种情况下,你不能这样做,因为一列不能同时有两个值。这就是为什么您需要自联接。如果您控制着该元,那么您可能希望将值合并在一起。比如:“城市=纽约&国家=美国”。然后你就可以用一系列相似的从句来测试它了。有可能在foreach循环中写出你的答案吗?