将MySQL行条目合并为一行

时间:2010-05-03 21:51:30

标签: mysql

我有两个表,一个用于listings,另一个表示tags表的listings列表。

listings表中,标签ID存储在名为tags的字段中,为1-2-3-。这对我来说非常好(正则表达式和连接分隔和显示数据),但我现在需要将这些标签的标题拉成一行。见下文。

listings table
id    tags
1     1-2-3-
2     4-5-6-


tags table
id    title
1     pig
2     dog
3     cat
4     mouse
5     elephant
6     duck

我需要从listings表中生成的是:

id     tags
2      mouse, elephant, duck

3 个答案:

答案 0 :(得分:1)

不幸的是,如果您的标签以非规范化格式存储,那么从1-2-3到相应的标签就没有简单的方法了。换句话说,没有简单的方法来分割出ID,加入另一个表然后重新组合。您最好的选择是创建一个包含两列的listing_tag

listing_id    tag_id
1             1
1             2
1             3
2             4
2             5
2             6

然后它只是一个简单的连接:

SELECT listing_id, GROUP_CONCAT(title SEPARATOR ', ') FROM listing_tag JOIN tags ON tags.id = tag_id

答案 1 :(得分:1)

这是一个可以提供帮助的查询。但由于它正在进行一些字符串操作,它可能不如常规连接那么好:

select l.id, group_concat( t.title ) 
   from listings l, tags t 
   where concat( '-', l.tags )  like concat( '%-', t.id, '-%' ) group by l.id ;

答案 2 :(得分:0)

GROUP_CONCAT()+ INNER JOIN + GROUP BY