2

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

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

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

4

1 回答 1

4

我建议您更改您的数据库设计,使其具有一个名为的连接表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
于 2011-09-17T23:48:24.647 回答