2015-06-21 49 views
0

我绝对不是MySQL忍者,而且我被困在过滤和合并同一个表中的数据。Mysql - 合并两行值对

这里的表

user_id | profile_key | profile_value 

2424  | status  | active 
2424  | channel  | 2345 
3543  | status  | closed 
3543  | channel  | 2345 
... 

我想用相同的信道值,并且只有主动行

过滤用户我试过

SELECT user_id, profile_key, profile_value 
FROM my_table 

WHERE (
     (profile_key = 'channel' AND profile_value = '"2345"') 
     AND 
     (profile_key = 'status' AND profile_value = 'active') 
    ) 

GROUP BY user_id 

它发现没有行。 我想我错过了联接行的一部分,但我不知道如何在同一个表内实现它。 任何帮助将非常感激:)

回答

0

你需要一个orgroup by,并且having条款:

SELECT user_id, GROUP_CONCAT(profile_key), GROUP_CONCAT(profile_value) 
FROM my_table 
WHERE (profile_key = 'channel' AND profile_value = '2345') OR 
     (profile_key = 'status' AND profile_value = 'active') 
GROUP BY user_id 
HAVING COUNT(DISTINCT profile_key) = 2; 

HAVING条款确保您获得了两场比赛。 SELECT中的GROUP_CONCAT()是因为每一行具有这些字段的多个值(即2)。根据您的示例数据,我也不认为您需要数字值附近的双引号。

+0

太棒了!我对HAVING条款一无所知! 数字值周围的双引号是因为表中存储的是这样的。 谢谢戈登! :) – sXe