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