2012-01-27 106 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