2012-08-07 76 views
1

这是我的SQL问题SQL最大匹配条目

表 - 活动

id activity userID 

0 99 1 

1 99 2 

2 99 3 

3 88 1 

4 77 2 

5 77 3 

我希望能够查询该表产生这样的结果是池活动的选择由

different users: 

99 1 2 3 

88 1 

77 2 3 

我的第一次尝试是使用JOIN递归地自我连接表。但这很令人头疼。任何人有其他建议?

感谢

编辑: 另一个问题。如果我想在分组之前检查用户是否是朋友,那该怎么办?

表 - 交友

id userID friendID 
0 1 2 
1 2 1 
2 1 3 
3 3 1 
4 2 3 
5 3 2 

所以他们是朋友(在两个方向)。然后,我想再次合并(GROUP BY),因为他们又是朋友。

再次,谢谢。你们给我很好的指导。

+0

使用'GROUP BY activity'和'GROUP_CONCAT()'函数。 – 2012-08-07 07:56:18

+0

仙境中可能存在递归自连接 – Andomar 2012-08-07 08:00:17

+0

Adnomar,您的评论是一个很好的比喻 – LKS 2012-08-07 08:13:52

回答

1

使用GROUP BY活动和GROUP_CONCAT()

这样的代码:

SELECT activity,GROUP_CONCAT(userID,' ') AS Groups 
FROM Activity 
GROUP BY activity 
ORDER BY activity DESC; 

SEE THE FIDDLE

+0

谢谢,这是正确的答案。 – LKS 2012-08-07 08:09:30

+0

他们都是一样的答案! – Barmar 2012-08-07 08:32:13

2
select activity,GROUP_CONCAT(userID,' ') from Activity 
group by activity 
+0

谢谢,这是正确的答案。 – LKS 2012-08-07 08:07:58

1
select act,GROUP_CONCAT(userid,' ') from users 
group by act 
order by act desc 

SQL DEMO HERE

+0

谢谢,这是正确的答案。 – LKS 2012-08-07 08:11:35

1

试试这个:

CREATE TABLE myTable (id int, activity int, userID int); 
INSERT INTO myTable VALUES (0, 99, 1); 
INSERT INTO myTable VALUES (1, 99, 2); 
INSERT INTO myTable VALUES (2, 99, 3); 
INSERT INTO myTable VALUES (3, 88, 1); 
INSERT INTO myTable VALUES (4, 77, 2); 
INSERT INTO myTable VALUES (5, 77, 3); 

SELECT activity,GROUP_CONCAT(userID,' ') 
    FROM mytable 
GROUP BY activity 
ORDER BY activity DESC; 
+0

谢谢,这是正确的答案。 – LKS 2012-08-07 08:10:45

1

GROUP_CONCAT是你在找什么:

SELECT activity, 
     GROUP_CONCAT(userID,' ') AS Groups 
FROM  Activity 
GROUP BY activity 
ORDER BY activity DESC; 
+0

谢谢,这是正确的答案。 – LKS 2012-08-07 08:12:58