2010-09-08 82 views
33

我有兩個表格,關鍵字和數據。如何將具有相同列值的mysql行組合到一行中?

表關鍵字有2列(id,關鍵字),表數據有3列(id [keyword.id的外鍵,名稱,值))。

我使用此查詢:

SELECT k.id, d.value, d.name 
FROM keywords AS k 
INNER JOIN data as d ON k.id = d.id 

返回是這樣的:(未來或許更多)

1 123 name1 
1 456 name2 
2 943 name1 
3 542 name1 
3 532 name2 
3 682 name3 

每個ID都可以值從0到3。

如何檢索同一行中具有相同ID的所有行?

1 123 456 
2 943 
3 542 532 682 

我想這樣做,是因爲我希望能值進行排序。

+2

這是一種轉變,它真的會更好地做應用程序端,而不是讓MySQL去做。 – Amber 2010-09-08 03:12:57

+0

我同意琥珀,但如果你仍然只想用SQL,嗯..我會谷歌詳細信息爲「concat」和「group by」sql函數。 – 2010-09-08 03:15:57

+0

我想這樣做,因爲我希望能夠對值進行排序,所以如果我能夠直接從mysql中進行排序,那將會很棒。你知道我怎麼能輕鬆地排序存儲在PHP數組中的每一列? – jarkam 2010-09-08 03:16:30

回答

59

使用GROUP_CONCAT()這樣的:

SELECT k.id, GROUP_CONCAT(d.value) 
    FROM keywords AS k 
    INNER JOIN data as d ON k.id = d.id 
    GROUP BY k.id 

此外,你可能需要做ORDER BY d.name只要你想獲取值的確切順序。像這樣:

SELECT k.id, GROUP_CONCAT(d.value ORDER BY d.name separator ' ') 
    FROM keywords AS k 
    INNER JOIN data as d ON k.id = d.id 
    GROUP BY k.id 
+0

是的,我忘了GROUP BY ... – jarkam 2010-09-08 03:23:38

+0

你忘了'GROUP BY k.id'嗎? – Amber 2010-09-08 03:24:29

+0

@Jarkam,因爲你在這個查詢中沒有使用'GROUP BY k.id'。 – shamittomar 2010-09-08 03:25:22

相關問題