2011-09-17 29 views
1

私の質問のタイトルはどれくらい正確かはっきりしていませんが、ちょっと説明してください。Mysql - 複数のIDで結合し、結合された列を結合する?

は、私は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つの返された列にマージして、後でフォーマットすることができます。

+2

IDを分離し、適切にあなたのテーブルを正規化します。アイデアについては、この質問を参照してください:http://stackoverflow.com/q/7457643/723693 – ain

答えて

3

release_artistと呼ばれるjoin tableというアーティストとリリース間の多対多の関係をモデル化するようにデータベース設計を変更することをお勧めします。この表には、2つの列、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