2011-06-28 59 views
0

我試圖返回討論列表及其附加隊列(ids和名稱)。Mysql返回多個逗號分隔記錄

到目前爲止,我有以下幾點:

SELECT a.id as discussion_id,c.queue_id,e.queue_name 
FROM support_discussions AS a 

JOIN (
SELECT b.queue_id,b.discussion_id 
FROM support_queues_discussions AS b 
) AS c ON a.id=c.discussion_id 

JOIN (
SELECT d.id,d.name AS queue_name 
FROM support_queues AS d 
) AS e ON c.queue_id=e.id 

這將返回以下(預期):

discussion_id | queue_id |隊列名稱

1 | 1 |隊列名稱A

1 | 2 |隊列名稱乙

我真正想要做的是得到它的每一次討論恢復爲一行,與單獨的列沿着隊列ID和隊列名稱:

discussion_id | queue_id |隊列名稱

1 | 1,2 |隊列名稱A,隊列名稱B

有關如何以有效方式完成此操作的任何想法?

回答

1

有在MySQL GROUP_CONCAT函數,不正是你想要的

你想一想如果隊列名稱包含逗號字符會發生什麼?也許你應該重新考慮你的解決方案,因爲你所描述的聲音方式狡猾

+0

我知道一個事實,在隊列名稱中不會有任何逗號,因爲我列出了它們在我面前的所有列表;)我會很感激你對如何最好地執行此操作的想法..我不喜歡爲每個討論記錄進行單獨查詢的想法,所以旨在將它壓縮成一個查詢。 – RichW

+0

問題是由GROUP_CONCAT生成的值的順序不是確定性的。換句話說 - 你不能假定queue_id中的第一個值將對應於queue_name中的第一個值。您可以嘗試通過執行類似select discussion_id,queue_id from ... join ...的方法來加載數據,其中位於discussion_id(id列表)中 - 這會使查詢數量減少很多 – keymone

1

你可以使用GROUP_CONCAT

+0

我已經與GROUP_CONCAT,但我認爲我遇到了問題。如果它在第一次連接中返回逗號分隔列表,則第二次連接的on語句將不起作用(c.queue_id = e.id)。我希望這是有道理的!! – RichW