Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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
MySQL自定义组concat_Mysql_Group Concat - Fatal编程技术网

MySQL自定义组concat

MySQL自定义组concat,mysql,group-concat,Mysql,Group Concat,我需要转换我的查询结果,所以具有相同外键的多行只能是一行。 我可以通过分组来做到这一点。问题是,在我的一个列中,我想用不同的分组连接一些列。 例如,我的表格包含如下内容: shopId Brand Category Color QTY ---------------------------------------------- 15 Dell NoteBook Red 5 15 Dell NoteBoo

我需要转换我的查询结果,所以具有相同外键的多行只能是一行。 我可以通过分组来做到这一点。问题是,在我的一个列中,我想用不同的分组连接一些列。 例如,我的表格包含如下内容:

shopId     Brand    Category    Color     QTY
----------------------------------------------
15         Dell     NoteBook    Red       5
15         Dell     NoteBook    Blue      1
15         HP       NoteBook    red       2
15         HP       NetBook     red       3
14         Sony     NoteBook    yellow    1
14         Acer     Tablet      red       10
品牌、类别和颜色都是从外键检索的。 我想把这个结果呈现如下

ShopId      Dell    Color             HP    Color    etc...
-----------------------------------------------------------
15          6       red:5, Blue:1     2     red:2    
14 ..............
在我的查询中,我按shopId对它们进行了分组,使用sum和case statment查找每个品牌和类别的总数量是一件容易的工作。我的问题是如何连接店铺、类别、品牌分组的颜色和数量(总分组是按shopId而不是店铺、类别、品牌)

我的表是

CREATE TABLE `shopstorage` ( `color` int(11) NOT NULL, `category` int(11) NOT NULL, `brand` int(11) NOT NULL, `shop` int(11) NOT NULL, `date` date NOT NULL, `qty` tinyint(4) NOT NULL, PRIMARY KEY (`color`,`category`,`brand`,`shop`,`date`), KEY `clrEpClr` (`color`), KEY `clrEpCat` (`category`), KEY `clrEpshop` (`shop`), KEY `clrEpBrand` (`brand`), CONSTRAINT `SSBrand` FOREIGN KEY (`brand`) REFERENCES `brand` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `SSCat` FOREIGN KEY (`category`) REFERENCES `productcategory` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `SSClr` FOREIGN KEY (`color`) REFERENCES `color` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `SSShop` FOREIGN KEY (`shop`) REFERENCES `shop` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB DEFAULT CHARSET=utf8 创建表“shopstorage”( `颜色'int(11)不为空, `类别'int(11)不为空, `商标'int(11)不为空, `shop`int(11)不为空, `日期`日期不为空, `数量'tinyint(4)不为空, 主键(`color`、`category`、`brand`、`shop`、`date`), 键'clrEpClr'('color'), 键'clrEpCat'('category`), 键'clrEpshop'('shop'), 键“clrEpBrand”(“brand”), 约束`SSBrand`外键(`brand`)在删除时引用`brand`(`id`),在更新时不执行任何操作, 约束`SSCat`外键(`category`)在删除时引用`productcategory`(`id`),在更新时不执行任何操作, 约束`SSClr`外键(`color`)在删除时引用`color`(`id`),在更新时不操作, 约束`SSShop`外键(`shop`)在删除时引用`shop`(`id`),在更新时不执行任何操作 )引擎=InnoDB默认字符集=utf8 我的不完全查询是

select shop.name, shop.floor, shop.no, sum(case when brand.name ='ASUS' and productcategory.name='NoteBook' then shopstorage.qty else 0 end) as ASUS, sum(case when brand.name ='HP' and productcategory.name='NoteBook' then shopstorage.qty else 0 end) as HP, sum(case when brand.name ='Sony' and productcategory.name='NoteBook' then shopstorage.qty else 0 end) as Sony, sum(case when brand.name ='Dell' and productcategory.name='NoteBook' then shopstorage.qty else 0 end) as Dell, sum(case when brand.name ='ASUS' and productcategory.name='NetBook' then shopstorage.qty else 0 end) as ASUS, sum(case when brand.name ='HP' and productcategory.name='NetBook' then shopstorage.qty else 0 end) as HP, sum(case when brand.name ='Sony' and productcategory.name='NetBook' then shopstorage.qty else 0 end) as Sony, sum(case when brand.name ='Dell' and productcategory.name='NetBook' then shopstorage.qty else 0 end) as Dell, sum(case when brand.name ='ASUS' and productcategory.name='Tablet' then shopstorage.qty else 0 end) as ASUS, sum(case when brand.name ='HP' and productcategory.name='Tablet' then shopstorage.qty else 0 end) as HP, sum(case when brand.name ='Sony' and productcategory.name='Tablet' then shopstorage.qty else 0 end) as Sony, sum(case when brand.name ='Dell' and productcategory.name='Tablet' then shopstorage.qty else 0 end) as Dell from shopstorage join brand on shopstorage.brand=brand.id join color on shopstorage.color=color.id join productcategory on shopstorage.category=productcategory.id join shop on shop.id = shopstorage.shop group by shopstorage.shop 挑选 店铺名称、店铺楼层、店铺编号、, 求和(当brand.name='ASUS'和productcategory.name='NoteBook'然后shopstorage.qty else 0结束时的情况)为ASUS, 总和(当brand.name='HP'和productcategory.name='NoteBook'然后shopstorage.qty else 0结束时的情况)为HP, sum(brand.name='Sony'和productcategory.name='NoteBook'以及shopstorage.qty else 0结束时的情况)为Sony, 总和(当brand.name='Dell'和productcategory.name='NoteBook'然后shopstorage.qty else 0结束时的情况)为Dell, 求和(当brand.name='ASUS'和productcategory.name='NetBook'然后shopstorage.qty else 0结束时的情况)为ASUS, 总和(当brand.name='HP'和productcategory.name='NetBook'然后shopstorage.qty else 0结束时的情况)为HP, 总和(brand.name='Sony'和productcategory.name='NetBook'以及shopstorage.qty else 0结束时的情况)为索尼, sum(brand.name='Dell'和productcategory.name='NetBook'然后shopstorage.qty else 0 end)作为Dell, 合计(当brand.name='ASUS'和productcategory.name='Tablet'然后shopstorage.qty else 0结束时的情况)为ASUS, 总和(当brand.name='HP'和productcategory.name='Tablet'然后shopstorage.qty else 0结束时的情况)为HP, 总和(brand.name='Sony'和productcategory.name='Tablet'然后shopstorage.qty else 0结束时的情况)为索尼, 合计(当brand.name='Dell'和productcategory.name='Tablet'然后shopstorage.qty else 0结束时的情况)为Dell 从商店仓库 在shopstorage上加入品牌。品牌=品牌.id 在shopstorage.color=color.id上加入颜色 加入shopstorage上的productcategory.category=productcategory.id 在shop.id=shopstorage.shop上加入店铺 按商店分组存储
我正在寻找一种方法,在每个总和后添加一列,用于指定每个颜色的数量。例如,如果HP是15,它有7个红色和8个蓝色笔记本。我尝试了GROUP_Concat,但由于分组错误,结果不正确。

我找到了答案,希望与其他人分享。 我在每次求和后的查询中添加了以下代码

,group_concat(case when brand.name='{$brand['name']}' and category={$category['id']} then concat(color.name,':',num) end) as {$brand['name']}C
{$brand['name']}和{$category['id']}是我的php代码中用于在品牌和类别之间迭代的变量
我不知道为什么我花了这么长时间才找到这么简单的解决办法:P真为我感到羞耻:D

你想要一个“支点”。搜索那个词我已经搜索过了。但tanks:)向我们展示您的表结构(Show CREATE table your_table的结果)和您到目前为止的查询。@Jocelyn我将它们添加到问题的末尾,这有点像再次尝试使用SQL作为图灵完整语言。有些东西在应用程序代码中比在SQL中做得更好。仅此而已。(也就是说,您可以实现它,但它不是很灵活,因此维护可能很复杂-应用程序代码可以更优雅地处理此问题)