0

私は他の例を見てきましたが、これらの MySQL テーブルからこのような結果 (アーティスト名 - リリース名 - 年 - YT) を表示するための最も効率的なクエリは何かまだわかりません。別のページへのリンクにも ID を使用します。

tbl_artists
artist_id       artist_name

tbl_releases
release_id      release_name    release_year    release_yt

tbl_release_artists
release_id      artist_id       artist_order

以前は tbl_releases に artist_id がありましたが、別のテーブル (tbl_release_artists) を追加し、いくつかのリリース/曲には複数のアーティストがいるため、そこに含めました。各リリースにあったすべてのアーティストを表示するには、以下のクエリをどのように変更すればよいでしょうか? 最良の解決策は GROUP_CONCAT だと読みましたか? どんな助けでも大歓迎です。前もって感謝します。

SELECT Releases.artist_id, Releases.release_name, Releases.release_year, Releases.release_yt, Artists.artist_id, Artists.artist_name 
FROM tbl_releases AS Releases
LEFT JOIN tbl_artists AS Artists
USING ( artist_id )
ORDER BY Artists.artist_name, Releases.release_year, Releases.release_name ASC
4

1 に答える 1

0

最初に、 を使用するようにクエリを修正する必要がありますtbl_release_artists。クエリを読みやすくするために、テーブル エイリアスも追加しました。これらはテーブル名の省略形であるため、長い名前が繰り返されてもクエリが乱雑になることはありません。group by次に、句を使用してリリースごとに集計する必要があります。

SELECT r.release_name, r.release_year, r.release_yt, 
       group_concat(a.artist_id) as artist_ids,
       group_concat(a.artist_name) as artist_names
FROM tbl_release_artists ra join
     tbl_releases r
     on r.release_id = ra.release_id
     tbl_artists a
     on a.artist_id = ra.artist_id
GROUP BY r.release_year, r.release_name, r.release_yt
ORDER BY r.release_year, r.release_name ASC;

もちろん、アーティストが複数いる場合、アーティストごとに注文してもあまり意味がありません。したがって、これはリリース情報で注文するだけです。

于 2013-09-10T22:52:37.550 に答える