Mysql - 加入多个ID并结束连接列?

时间:2011-09-17 23:46:07

标签: mysql join concat

不确定我的问题标题有多准确,但让我解释一下。

我有两张桌子:艺术家,发行版

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)加入,但这只会带回一个艺术家的名字。我想将所有涉及的艺术家合并到一个返回的列中,用管道分隔,以便稍后进行格式化。

1 个答案:

答案 0 :(得分:3)

我建议您更改数据库设计,使其成为名为release_artist的{​​{3}},用于模拟艺术家和版本之间的多对多关系。此表应包含两列:release_idartist_id

如果您无法更改数据库设计,可以使用join table,但速度会很慢:

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