【问题标题】:GROUP_CONCAT for 3 MySQL table structure?3 MySQL表结构的GROUP_CONCAT?
【发布时间】:2013-09-10 22:47:18
【问题描述】:

我查看了其他示例,但仍然无法确定从这些 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

【问题讨论】:

    标签: mysql group-concat


    【解决方案1】:

    首先,您需要修复查询以使用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;
    

    当然,如果有多个艺术家,按艺术家排序并没有什么意义。所以这只是按发布信息排序。

    【讨论】:

    • 感谢您的快速回复。 :) 查询返回以下内容:#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 7 行的 'tbl_artists a on a.artist_id = ra.ar​​tist_id GROUP BY r.release_year, r.rele' 附近使用正确的语法
    • 现在完美运行,谢谢。我刚刚添加了另一个连接,所以查询是这样的: 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.ar​​tist_id GROUP BY r.release_year, r.release_name, r.release_yt ORDER BY r.release_year, r.release_name ASC
    猜你喜欢
    • 1970-01-01
    • 2017-11-14
    • 2019-04-28
    • 1970-01-01
    • 2011-01-31
    • 2013-03-28
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    相关资源
    最近更新 更多