2011-09-17 42 views
1

不知道我的问题标题有多准确,但让我更好解释一下。Mysql - 加入多个ID和拼接加入列?

我有两个表:艺术家,释放

table artist 
    artist_id, 
    artist_name 

table release 
    release_id, 
    release_artist_ids, 
    release_name 

还有更多的列名,但这些都是参与我的问题的人。

release_artist_ids可以包含一个或多个与艺术家表格对应的艺术家ID。如果同一个release_id有多个艺术家的特征,那么我用逗号分隔了这些ID。

所以一个例子释放行:

1 - 2,5 - 示例性释放

我想要做的是列表中的版本,并加入了艺术家表,以获取参与发行的艺术家名字。

我设法加入使用IN(release.release_artist_ids),但这只能带回一个艺术家的名字。我想将所有参与的艺术家合并到一个返回的列中,并用管道分隔,以便稍后格式化。

+2

你真的应该摆脱逗号分隔的ID和正确正常化你的表。看到这个问题的想法:http://stackoverflow.com/q/7457643/723693 – ain

回答

3

我建议您将数据库设计更改为join table,它叫做release_artist,它模拟艺术家和发布之间的多对多关系。该表应该有两列:release_idartist_id

如果您不能更改数据库的设计,你可以使用FIND_IN_SET,但它会很慢:

SELECT 
    release.release_id, 
    GROUP_CONCAT(artist.artist_name, '|') AS artist_names 
FROM artist 
JOIN release 
ON FIND_IN_SET(artist.id, release.release_artist_ids) 
GROUP BY release.release_id 
+0

谢谢。这工作。我没有想过为发行艺人制作一张额外的桌子。 – user887515