我有一张专辑的ID,我想从他们的艺术家那里获得专辑的所有曲目。 相册有很多曲目。 曲目有很多制片人(艺术家)。
MySQL结构
问题
我不知道我是否可以在完整的mySQL中完成它,或者我是否应该添加一些PHP。
编辑:我的问题不够明确。问题不在于使用联接表进行查询,而是使用艺术家列表获取曲目。您可以使用group_concat处理它。
教程: http://www.mysqlperformanceblog.com/2006/09/04/group_concat-useful-group-by-extension/
答案 0 :(得分: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
答案 1 :(得分:0)
了解SQL joins:
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 = ?
答案 2 :(得分: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;
但是,根据您需要使用数据的方式,没有什么可以阻止您进行单独的查询。
答案 3 :(得分:0)
你可以,你应该用纯MySQL做,有三个表,用外键链接,用JOIN查询。
你不需要PHP来重载工作,MySQL可以很好地处理它:)
答案 4 :(得分:0)
您可以使用LEFT JOIN
仅使用mysql实现此目的:
SELECT * FROM Albums a
LEFT JOIN Tracks b
ON a.album_id = b.track_album
LEFT JOIN Produced c
on b.track_id = c.produced_track
LEFT JOIN Artist d
on c.produced_artist = d.artist_id
WHERE a.album_id = ?
答案 5 :(得分:0)
您可以使用聚合函数和分组子句在SQL中执行此操作。
应该看起来像: 选择t。*, some_aggregate_function(a.whatever) 来自Tracks t 左连接生成p on(t.trac_id = p.produced_id) 左连接艺术家a(p.produced_artist = a.artist_id) 按t。*分组。