2014-03-03 62 views
1

我有一個數據集,其中很多用戶註釋了一組工件,並且我想知道用戶直接/間接與之交互的每個其他用戶。我想開發查詢,它顯示每個用戶和每個其他用戶對他們貢獻的工件的貢獻。我的數據看起來是這樣跟蹤對象上用戶之間的交互

+----------+------+ 
| Artifact | User | 
+----------+------+ 
| 1  | a | 
| 1  | b | 
| 1  | c | 
| 1  | d | 
| 2  | a | 
| 2  | m | 
+----------+------+ 

因此,在這種情況下,用戶A已經與互動B,C,d &米; b已經與a,d相互作用;和M具有互動與

理想情況下,不會出現重疊(因此,只有不同的值),但如果需要,我可以通過這些雜草

回答

2

可以使用GROUP_CONCAT功能:

SELECT 
    t1.User, GROUP_CONCAT(DISTINCT t2.User ORDER BY t2.User) 
FROM 
    test t1 
    JOIN test t2 ON (t1.Artifact = t2.Artifact AND t1.User != t2.User) 
GROUP BY t1.User 

Here's an example

+0

好,所以這主要是我想要的感謝!但實際上有太多的重疊,它沒有顯示每一個關係,有沒有辦法刪除重複以及(注意我對這裏的示例代碼的調整http://sqlfiddle.com/#!2/14b83/1),其中m&b有重複 – Mike

+1

以下是更新的查詢http://sqlfiddle.com/#!2/14b83/2,我也更新了答案(補充說明:GROUP_CONCAT(DISTINCT ...) –