2013-09-10 31 views
0

我看過其他例子,仍然無法弄清楚從這些MySQL表格中顯示如此結果(Artist Name - Release Name - Year - YT)的效率最高的查詢。我將使用ID鏈接到不同的頁面。3個MySQL表結構的GROUP_CONCAT?

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 

回答

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; 

當然,與多位藝術家,由藝術家訂購併沒有真正意義。所以這只是通過發佈信息來訂購。

+0

感謝您的快速回復。 :)該查詢正在恢復以下內容:#1064 - 您的SQL語法錯誤;請查看與您的MySQL服務器版本相對應的手冊,以便在第7行的'tbl_artists a on a.artist_id = ra.ar​​tist_id GROUP BY r.release_year,r.rele'附近使用正確的語法。 – alexacruiz

+0

現在完美地工作,謝謝。我剛剛添加了另一個連接,因此查詢如下所示: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 JOIN 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 – alexacruiz