我有两个表,一个用于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
答案 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