2

質問のタイトルがどれほど正確かはわかりませんが、もう少し詳しく説明させてください。

2 つのテーブルがあります: アーティスト、リリース

table artist
  artist_id, 
  artist_name

table release
  release_id,
  release_artist_ids,
  release_name

他にも列名がありますが、これらは私の問題に関係するものです。

release_artist_ids には、アーティスト テーブルに対応する 1 つ以上のアーティスト ID を含めることができます。同じ release_id に複数のアーティストが登場する場合は、ID をコンマで区切って指定しました。

したがって、リリース行の例:

1 -- 2,5 -- リリースの例

私がやりたいことは、リリースを一覧表示し、アーティスト テーブルに参加して、リリースに関係するアーティスト名を取得することです。

IN (release.release_artist_ids) を使用して参加できましたが、アーティスト名が 1 つしか表示されません。関連するすべてのアーティストを、パイプで区切られた 1 つの返された列にマージして、後でフォーマットできるようにしたいと考えています。

4

1 に答える 1

4

データベースの設計を変更して、アーティストとリリースの間の多対多の関係をモデル化するという名前の結合テーブルを作成することをお勧めします。release_artistこのテーブルには、 と の 2 つの列が必要release_idですartist_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 に答える