2012-01-27 71 views
0

您好我一直在研究和有问题与MySQL查询。
我有一个名为“朋友”的表,它具有列:id,user1和user2。 我想创建一个查询,我可以得到1条记录,结果与来自user1列的所有用户以及来自user2列的与特定用户相关的所有用户连接,以便获得包含所有用户的结果朋友。例如,表中的“朋友”可能含有:多个查询concat

 
****friends**** 
id user1 user2 
0  33  1 
1  33  2 
2  34  25 
3  3  33 
4  27  33 

结果我要的是一个名为“友谊”的数据是包含“1,2,3,27”,因为这些都是一个串记录与用户33是朋友的用户ID。我能够运行:

 
SELECT (CAST(GROUP_CONCAT(user2) AS CHAR(10000) CHARACTER SET utf8)) as friendships from friends where user1 =33 

将返回“1,2”,我可以扭转它在一个单独的查询来获取“3,27”,不过,我想获得的结果在一个查询如果可能的话!所有的帮助表示赞赏:)

+1

写两个查询和使用UNION这应该工作:http://www.mysqltutorial.org/sql- union-mysql.aspx – 2012-01-27 21:42:49

+0

我继续尝试联合方法,结果是正确的,但是,我仍然有一个问题将它们连接成一个结果。与工会即时做

 select user1 from friends where user2 = 33 union select user2 from friends where user1 = 33
,但它不是在一个逗号分隔结果 – 2012-01-27 21:51:10

+0

为什么铸造group_concat?它已经返回一个字符串,它将被客户端软件视为char/varchar/text。 – 2012-01-27 22:04:59

回答

1

我想,如果我理解你的问题正确

 
select GROUP_CONCAT(a.friendships, b.friendships) as x from (
   (SELECT (CAST(GROUP_CONCAT(user2) AS CHAR(10000) CHARACTER SET utf8)) as friendships from friends where user1 = 33) as a, 
   (SELECT (CAST(GROUP_CONCAT(user1) AS CHAR(10000) CHARACTER SET utf8)) as friendships from friends where user2 = 33) as b 
) 
+0

谢谢,这个答案是有效的,ypercubes也会这样回答,你认为哪种方法更好?我试着一遍又一遍地运行它们,但时代差异很大 – 2012-01-27 23:31:40

0
SELECT 
    CAST(GROUP_CONCAT(u) AS CHAR(10000) CHARACTER SET utf8) AS friendships 
FROM 
    (SELECT user2 AS u 
    FROM friends 
    WHERE user1 = 33 
    UNION ALL 
    SELECT user1 
    FROM friends 
    WHERE user2 = 33 
) AS tmp