Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我可以使用2组concat组合吗?还是应该使用子查询_Php_Mysql_Sql_Group Concat - Fatal编程技术网

Php 我可以使用2组concat组合吗?还是应该使用子查询

Php 我可以使用2组concat组合吗?还是应该使用子查询,php,mysql,sql,group-concat,Php,Mysql,Sql,Group Concat,我有一个私人项目,我在建我的家。我想知道如何进行查询。我有5张表格: 专辑 光盘格式 标签 唱片 (一张相册包含多张光盘,一张光盘只属于一张相册。一张光盘只有一种格式) 相册标签 (一个相册有多个唱片标签,一个唱片标签可以在多个相册中) 比如说精选专辑1,我希望看到的结果是: albumid name format label ------------------------------------------- 1 name1 CD, DVD SON

我有一个私人项目,我在建我的家。我想知道如何进行查询。我有5张表格:

专辑 光盘格式 标签 唱片 (一张相册包含多张光盘,一张光盘只属于一张相册。一张光盘只有一种格式)

相册标签 (一个相册有多个唱片标签,一个唱片标签可以在多个相册中)

比如说精选专辑1,我希望看到的结果是:

albumid  name     format     label
-------------------------------------------
1        name1    CD, DVD    SONY, PHANTOM
我尝试过使用group concat,但它只适用于“格式”。一旦我为标签添加了另一个组concat,它就不起作用了。我曾读到,也许解决方案是使用子查询,但我尝试了每种组合,因为我是一个新手,所以没有太多的成功。 我可以使用两种组合的
组\u concat
?如果没有,我该怎么办

谢谢,

Marco

您需要加入所有表。使用
GROUP\u CONCAT
(使用
DISTINCT
仅选择唯一值),并按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
labelid    label
------------------------
1           SONY
2           EMI
3           COLUMBIA
4           PHANTOM
5           UNIVERSAL
discid  albumid    formatid
---------------------------
1        1         1
2        1         2
3        7         3
4        5         1
albumid   labelid
-----------------
1         1
1         4
5         5
4         1
albumid  name     format     label
-------------------------------------------
1        name1    CD, DVD    SONY, PHANTOM
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