2010-09-08 67 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

相关问题