我可以使用2组concat组合吗?或者我应该使用子查询

时间:2012-10-22 03:53:10

标签: php mysql sql group-concat

我有一个个人项目,我正在建立我的家庭唱片。我正在试图弄清楚如何进行查询。我有 5 表:

专辑

albumid   name 
------------------
1         name1
2         name2    
3         name3    
4         name4    
5         name5    
6         name6     
7         name7  

discformat

formatid    format
-----------------------
1           CD
2           DVD
3           CASSETTE

标签

labelid    label
------------------------
1           SONY
2           EMI
3           COLUMBIA
4           PHANTOM
5           UNIVERSAL

album_disc

(一张专辑包含多张光盘,一张光盘只属于一张专辑。光盘只有一种格式)

discid  albumid    formatid
---------------------------
1        1         1
2        1         2
3        7         3
4        5         1

album_label

(一张专辑有多个唱片标签,唱片标签可以在很多专辑中)

albumid   labelid
-----------------
1         1
1         4
5         5
4         1

让我们说一个选择专辑1,我希望看到结果:

albumid  name     format     label
-------------------------------------------
1        name1    CD, DVD    SONY, PHANTOM

我尝试过使用group concat,但它仅适用于'format'。一旦我为标签添加另一个组concat,它就不起作用。我读过,也许解决方案是使用子查询,但我已经尝试了所有组合,因为我是一个新手,我没有取得很大的成功。 我可以使用group_concat的2种组合吗?如果没有,我该怎么办?

谢谢,
马可

1 个答案:

答案 0 :(得分:3)

您需要加入所有表格。使用GROUP_CONCATDISTINCT仅选择唯一值),并按albumID对其进行分组

SELECT  a.albumID, a.Name,
        GROUP_CONCAT(DISTINCT c.format) formats,
        GROUP_CONCAT(DISTINCT e.`label`) labels
FROM    album a
        INNER JOIN album_disc b
            ON a.albumID =  b.albumid
        INNER JOIN discformat c
            ON b.formatid = c.formatID
        INNER JOIN album_label d
            ON a.albumid = d.albumID
        INNER JOIN label e
            ON e.labelid = d.labelid
WHERE a.albumID = 1         // remove this line if you want to select all records
GROUP BY a.albumID, a.Name

SQLFiddle Demo