-1

私はアルバムの ID を持っており、アーティストのアルバムからすべてのトラックを取得したいと考えています。アルバムには多くのトラックがあります。トラックには多くのプロデューサー(アーティスト) がいます。

MySQL の構造

データベース構造

問題

完全な mySQL で実行できるかどうか、または代わりに PHP を追加する必要があるかどうかはわかりません。

編集:私の質問は十分に明確ではありませんでした。問題は、結合されたテーブルでクエリを実行することではなく、アーティストのリストでトラックを取得することでした。これは group_concat で処理できます。

チュートリアル: http://www.mysqlperformanceblog.com/2006/09/04/group_concat-useful-group-by-extension/

4

6 に答える 6

2

それは、データがどのように必要かによって異なります。アーティストにもっと興味がある場合は、アルバムのトラックに参加してから、アーティストをトラックに参加させることができます。これにより、各アーティストのレコードが得られます。

SELECT
    ar.*
FROM albums AS al
JOIN tracks AS t
    ON t.album_id = al.album_id
JOIN produced AS p
    ON p.produced_track = t.track_id
JOIN artists AS ar
    ON ar.artist_id = p.produced_artist

トラックにもっと興味があり、アーティストをリストする必要がある場合は、同じ結合を行いますが、アーティスト名で group_concat を使用し、トラック ID でグループ化します。

SELECT
    t.*,
    GROUP_CONCAT(DISTINCT ar.name ORDER BY ar.name SEPARATOR ', ') AS artists
FROM albums AS al
JOIN tracks AS t
    ON t.album_id = al.album_id
JOIN produced AS p
    ON p.produced_track = t.track_id
JOIN artists AS ar
    ON ar.artist_id = p.produced_artist
GROUP BY t.track_id
于 2013-05-15T08:36:20.930 に答える
0

集計関数と group by 句を使用して SQL で実行できます。

select t.*, some_aggregate_function(a.whatever) from Tracks t left join Produced p on (t.trac_id = p.produced_id) left join Artist a on (p.produced_artist = a.artist_id) group by t .*

于 2013-05-15T08:41:42.913 に答える
0

SQL 結合について学習します。

SELECT *
FROM   Tracks
  JOIN Produced ON Produced.produced_track = Tracks.track_id
  JOIN Artists  ON Artists.artist_id = Produced.produced_artists
WHERE  Tracks.track_album = ?
于 2013-05-15T08:36:21.547 に答える
0

次のように純粋な SQL でこれを行うのがおそらく最善です。

SELECT * 
FROM albums al
LEFT JOIN tracks tr ON (tr.ttack_album = al.album_id)
LEFT JOIN produced pr ON (pr.produced_track = tr.track_id)
LEFT JOIN artists ar ON (ar.artist_id = pr.produced_artist)
WHERE al.album_id = thealbumid;

ただし、データをどのように使用する必要があるかに応じて、個別のクエリを実行することを妨げるものは何もありません。

于 2013-05-15T08:36:58.650 に答える
0

純粋な MySQL を使用して、3 つのテーブルを作成し、それらを外部キーでリンクし、JOIN を使用してクエリを実行できます。

作業をオーバーロードするためにPHPは必要ありません.MySQLはそれをうまく処理できます:)

于 2013-05-15T08:37:24.257 に答える