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 回答