簡體   English   中英

GROUP_CONCAT for 3 MySQL 表結構?

[英]GROUP_CONCAT for 3 MySQL table structure?

我查看了其他示例,但仍然無法弄清楚從這些 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

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

當然,對於多個藝術家,按藝術家排序實際上沒有意義。 所以這只是按發布信息排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM