0

以下のデータベースから次のような結果が得られるようにしたいと思います。

20  'someVideo'  'Jason Statham, Tom Cruise, Bruce Wills, Anne Hathaway'  'musicDirector'  'Director

アクターは「、」で区切られていることに注意してください。前もって感謝します

term_relationships IDvideo_idrelated_id
タイプ1205
俳優1202 俳優1203俳優1204 俳優12010 音楽12011 監督




俳優
IDタイトル
2トムクルーズ
3ブルースウィルズ
4アンハサウェイ
5ジェイソンステイサム


音楽ID
タイトル 10musicDirector

ディレクター
IDタイトル
10ディレクター

ビデオ
IDタイトル
20SomeVideo

4

2 に答える 2

0

アクター名をコンマ区切りのリストに結合するには、mysqlGROUP_CONCAT関数を使用できます。このSQLステートメントで必要なものが得られるかどうかを確認してください。

Select tr.video_id, videos.title AS video, 
   GROUP_CONCAT(DISTINCT(actors.title) SEPARATOR ',') AS actor_names,  
   GROUP_CONCAT(DISTINCT(directors.title) SEPARATOR ',') AS director,   
   GROUP_CONCAT(DISTINCT(musics.title) SEPARATOR ',') AS music 
FROM term_relationships tr inner join videos on videos.id = tr.video_id 
LEFT JOIN actors on tr.related_id = actors.id 
LEFT JOIN musics on tr.related_id = musics.id and tr.type = 'music' 
LEFT JOIN directors on tr.related_id = directors.id and tr.type = 'director' 
WHERE tr.video_id = 20 GROUP BY tr.video_id
于 2013-01-05T21:54:32.247 に答える
0

GROUP_CONCAT関数を使用したAndreaの回答は素晴らしく、機能します。ただし、次のようなアクター用のタイプフィルターも追加することで完成させる必要があります。

select tr.video_id, v.title, 
  GROUP_CONCAT(DISTINCT(a.title) SEPARATOR ',') actors,
  GROUP_CONCAT(DISTINCT(d.title) SEPARATOR ',') director,
  GROUP_CONCAT(DISTINCT(m.title) SEPARATOR ',') music
FROM term_relationships tr 
  INNER JOIN videos v on v.id = tr.video_id 
  LEFT JOIN actors a on tr.related_id = a.id and tr.type = 'actor'
  LEFT JOIN musics m on tr.related_id = m.id and tr.type = 'music' 
  LEFT JOIN directors d on tr.related_id = d.id and tr.type = 'director' 
WHERE tr.video_id = 20 
GROUP BY tr.video_id;
于 2013-01-05T22:47:19.353 に答える