Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL:GROUP_CONCAT aninhado


Tentar:
mysql> SELECT -> GROUP_CONCAT( -> CONCAT_WS('|||', 0, 1, -> GROUP_CONCAT(CONCAT_WS('|', 2, 3) SEPARATOR '||') -> ) -> ) `test`;ERRO 1111 (HY000):Uso inválido da função de grupo mysql> SELECT -> GROUP_CONCAT( -> CONCAT_WS('|||', 0, 1, -> (SELECT GROUP_CONCAT(CONCAT_WS('|', 2, 3) SEPARADOR '||')) -> ) -> ) `teste`;+-------------+| teste |+-------------+| 0|||1|||2|3 |+------------+1 linha no conjunto (0,00 seg) 

ATUALIZAÇÃO

Uma opção possível:
mysql> DROP TABLE IF EXISTS `parts`, `labor`, `kits`;Consulta OK, 0 linhas afetadas (0.00 seg)mysql> CREATE TABLE `kits` ( -> `id` int(11 ) NOT NULL AUTO_INCREMENT, -> `kit_id` int(11) DEFAULT NULL, -> `is_quote` tinyint(4) NOT NULL DEFAULT '0', -> `name` varchar(45) DEFAULT NULL, -> `description` varchar(150) DEFAULT NULL, -> `quantity` varchar(45) DEFAULT NULL, -> PRIMARY KEY (`id`), -> UNIQUE KEY `id_UNIQUE` (`id`), -> KEY `KIT` (` kit_id`) -> );Consulta OK, 0 linhas afetadas (0.00 seg)mysql> CREATE TABLE `labor` ( -> `id` int(11) NOT NULL AUTO_INCREMENT, -> `kit_id` int(11) DEFAULT NULL, -> `is_quote` tinyint(4) NOT NULL DEFAULT '0', -> `description` varchar(150) NOT NULL, -> `hours` varchar(45) NOT NULL DEFAULT '0', -> PRIMARY KEY (` id`), -> UNIQUE KEY `id_UNIQUE` (`id`), -> KEY `KIT` (`kit_id`) -> );Consulta OK, 0 linhas afetadas (0.00 seg)mysql> CREATE TABLE `parts` ( -> `id` int(11) NÃO NU LL AUTO_INCREMENT, -> `kit_id` int(11) DEFAULT NULL, -> `is_quote` tinyint(4) NOT NULL DEFAULT '0', -> `name` varchar(45) DEFAULT NULL, -> `description` varchar( 150) DEFAULT NULL, -> `sale_price` varchar(45) DEFAULT '0.00', -> `quantity` varchar(45) NOT NULL, -> PRIMARY KEY (`id`), -> UNIQUE KEY `id_UNIQUE` (` id`), -> KEY `KIT` (`kit_id`) -> );Consulta OK, 0 linhas afetadas (0.00 seg)mysql> INSERT INTO `kits` -> (`id`, -> `kit_id`, -> `is_quote`, -> `name`, -> `description`, -> `quantity`) -> VALUES -> (1,0,0,"Main Kit", "Sample Description",1);Query OK , 1 linha afetada (0.00 seg)mysql> INSERT INTO `kits` -> (`id`, -> `kit_id`, -> `is_quote`, -> `name`, -> `description`, -> `quantity `) -> VALUES -> (2,1,0,"Kit dentro do kit", "Sample Description",1);Query OK, 1 linha afetada (0.00 sec)mysql> INSERT INTO `parts` -> (`kit_id `, -> `is_quote`, -> `name`, -> `description`, -> `sale_price`, -> `quantidade`) -> VALORES -> (1,0,"Primeira peça do kit", "Descrição da peça","23.5",1);Consulta OK, 1 linha afetada (0,00 seg)mysql> INSERT INTO `parts ` -> (`kit_id`, -> `is_quote`, -> `name`, -> `description`, -> `sale_price`, -> `quantity`) -> VALUES -> (2,0,"Kit within kit part 1", "Sample Part Description","23.5",1);Query OK, 1 linha afetada (0.00 sec)mysql> INSERT INTO `parts` -> (`kit_id`, -> `is_quote`, -> `name`, -> `description`, -> `sale_price`, -> `quantity`) -> VALUES -> (2,0,"Kit dentro do kit parte 2", "Sample Part Description","23.5" ,1);Consulta OK, 1 linha afetada (0.00 sec)mysql> INSERT INTO `labor` -> (`kit_id`, -> `is_quote`, -> `description`, -> `hours`) -> VALUES -> (1,0,"First Kit labor","1.5");Consulta OK, 1 linha afetada (0.00 sec)mysql> INSERT INTO `labor` -> (`kit_id`, -> `is_quote`, -> ` description`, -> `hours`) -> VALUES -> (2,0,"Kit dentro do kit labor 1","1.5");Consulta OK, 1 linha afetada (0.00 sec)mysql> INSERT INTO `labor` -> (`kit_id`, -> `is_quote`, -> `description`, -> `hours`) -> VALUES -> (2,0,"Kit dentro do kit labor 2 ","1.5");Consulta OK, 1 linha afetada (0,00 seg)mysql> SELECT kits.id, kits.is_quote, -> GROUP_CONCAT( -> CONCAT_WS('|||', kits_table.id, kits_table.name, -> (SELECT GROUP_CONCAT( -> CONCAT_WS('|', parts.id, parts.name) -> SEPARATOR '||') FROM parts WHERE parts.kit_id =kits_table.id), -> (SELECT GROUP_CONCAT( -> CONCAT_WS('|', labor.id, labor.description) -> SEPARATOR '||') FROM labor WHERE labor.kit_id =kits_table.id) -> ) -> SEPARATOR '||||' -> ) como kits , -> GROUP_CONCAT(CONCAT_WS('|', parts.id, parts.name) SEPARATOR '|||') como partes, -> GROUP_CONCAT(CONCAT_WS('|', labor.id, labor.description) SEPARATOR '| ||') como mão de obra -> kits FROM -> kits LEFT JOIN como kits_table ON kits_table .kit_id =kits.id -> LEFT OUTER JOIN parts ON parts.kit_id =kits.id -> LEFT OUTER JOIN labor ON labor.kit_id =kits.id -> WHERE kits.id =1 -> GROUP BY kits.id\ G**************************** 1. linha ******************** ******** id:1is_quote:0 kits:2|||Kit dentro do kit|||2|Kit dentro do kit parte 1||3|Kit dentro do kit parte 2|||2|Kit dentro do kit mão de obra 1||3|Kit dentro do kit de mão de obra 2 partes:1|Primeiro Kit de mão de obra:1|Primeiro Kit de mão de obra1 linha no conjunto (0,00 seg) 

ATUALIZAÇÃO 2
mysql> SELECT kits.id, kits.is_quote, -> GROUP_CONCAT(DISTINCT -> CONCAT_WS('|||', kits_table.id, kits_table.name, -> (SELECT GROUP_CONCAT(DISTINCT -> CONCAT_WS ('|', parts.id, parts.name) -> SEPARATOR '||') FROM parts WHERE parts.kit_id =kits_table.id), -> (SELECT GROUP_CONCAT(DISTINCT -> CONCAT_WS('|', labor. id, labor.description) -> SEPARATOR '||') FROM labor WHERE labor.kit_id =kits_table.id) -> ) -> SEPARATOR '||||' -> ) como kits, -> GROUP_CONCAT(DISTINCT CONCAT_WS( '|', parts.id, parts.name) SEPARATOR '|||') como partes, -> GROUP_CONCAT(DISTINCT CONCAT_WS('|', labor.id, labor.description) SEPARATOR '|||') como trabalho -> FROM kits -> LEFT JOIN kits como kits_table ON kits_table.kit_id =kits.id -> LEFT OUTER JOIN parts ON parts.kit_id =kits.id -> LEFT OUTER JOIN labor ON labor.kit_id =kits.id -> WHERE kits.id =1 -> GROUP BY kits.id\G**************************** 1. linha **************** ************ id:1is_quote:0 kits:2|||Kit dentro do kit|||3|Kit dentro do kit parte 1||4|Kit dentro do kit parte 2|||3| Kit dentro do kit mão de obra 1||4|Kit dentro do kit mão de obra 2 partes:1|Primeiro Kit Parte 1|||2|Primeiro Kit Parte 2 mão de obra:1|Primeiro Kit mão de obra 1|||2|Primeiro Kit mão de obra 21 linhas em set (0,00 seg)