sql >> Base de Datos >  >> RDS >> Mysql

MySQL:GROUP_CONCAT anidado

Prueba:

mysql> SELECCIONAR -> GRUPO_CONCAT( -> CONCAT_WS('|||', 0, 1, -> GROUP_CONCAT(CONCAT_WS('|', 2, 3) SEPARADOR '||') -> ) -> ) `test`;ERROR 1111 (HY000):Uso no válido de la función de grupo mysql> SELECT -> GROUP_CONCAT( -> CONCAT_WS('|||', 0, 1, -> (SELECT GROUP_CONCAT(CONCAT_WS('|', 2, 3) SEPARADOR '||')) -> ) -> ) `prueba`;+-------------+| prueba |+-------------+| 0|||1|||2|3 |+-------------+1 fila en conjunto (0,00 seg) 

ACTUALIZAR

Una opción posible:

mysql> DROP TABLE IF EXISTS `parts`, `labor`, `kits`;Consulta OK, 0 filas afectadas (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) NULO POR DEFECTO, -> `cantidad` varchar(45) NULO POR DEFECTO, -> CLAVE PRINCIPAL (`id`), -> CLAVE ÚNICA `id_UNIQUE` (`id`), -> CLAVE `KIT` (` kit_id`) -> ); Consulta OK, 0 filas afectadas (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`), -> CLAVE ÚNICA `id_UNIQUE` (`id`), -> CLAVE `KIT` (`kit_id`) -> );Consulta OK, 0 filas afectadas (0.00 seg)mysql> CREAR TABLA `partes` ( -> `id` int(11) NO 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`), -> CLAVE `KIT` (`kit_id`) -> );Consulta OK, 0 filas afectadas (0.00 seg)mysql> INSERTAR EN `kits` -> (`id`, -> `kit_id`, -> `is_quote`, -> `name`, -> `description`, -> `quantity`) -> VALORES -> (1,0,0,"Kit principal", "Descripción de la muestra",1);Consulta OK , 1 fila afectada (0.00 seg) mysql> INSERT INTO `kits` -> (`id`, -> `kit_id`, -> `is_quote`, -> `name`, -> `description`, -> `quantity `) -> VALORES -> (2,1,0,"Kit dentro del kit", "Descripción de la muestra",1);Consulta OK, 1 fila afectada (0.00 seg)mysql> INSERTAR EN `partes` -> (`kit_id `, -> `es_cotización`, -> `nombre`, -> `descripción`, -> `precio_venta`, -> `cantidad`) -> VALORES -> (1,0,"Parte del primer kit", "Descripción de la pieza","23.5",1);Consulta OK, 1 fila afectada (0.00 seg)mysql> INSERTAR EN `partes ` -> (`kit_id`, -> `is_quote`, -> `name`, -> `description`, -> `sale_price`, -> `quantity`) -> VALORES -> (2,0,"Kit dentro de la parte 1 del kit", "Descripción de la pieza de muestra", "23.5", 1); Consulta OK, 1 fila afectada (0.00 seg) mysql> INSERT INTO `parts` -> (`kit_id`, -> `is_quote`, -> `nombre`, -> `descripción`, -> `precio_venta`, -> `cantidad`) -> VALORES -> (2,0,"Kit dentro del kit parte 2", "Descripción de la pieza de muestra","23.5" ,1); Consulta OK, 1 fila afectada (0.00 seg) mysql> INSERTAR EN `labor` -> (`kit_id`, -> `is_quote`, -> `description`, -> `hours`) -> VALORES -> (1,0,"Primer kit de trabajo","1.5");Consulta OK, 1 fila afectada (0.00 seg)mysql> INSERT INTO `labor` -> (`kit_id`, -> `is_quote`, -> ` descripción`, -> `horas`) -> VALORES -> (2,0,"Kit dentro del kit mano de obra 1","1.5");Consulta OK, 1 fila afectada (0.00 sec)mysql> INSERTAR EN `labor` -> (`kit_id`, -> `is_quote`, -> `description`, -> `hours`) -> VALORES -> (2,0,"Kit dentro del kit labor 2 ","1.5"); Consulta OK, 1 fila afectada (0.00 seg) mysql> SELECT kits.id, kits.is_quote, -> GROUP_CONCAT( -> CONCAT_WS('|||', kits_table.id, kits_table.name, -> (SELECCIONE GRUPO_CONCAT( -> CONCAT_WS('|', partes.id, partes.nombre) -> SEPARADOR '||') DESDE partes DONDE partes.kit_id =kits_table.id), -> (SELECCIONE GRUPO_CONCAT( -> CONCAT_WS('|', labor.id, labor.description) -> SEPARATOR '||') FROM labor WHERE labor.kit_id =kits_table.id) -> ) -> SEPARATOR '||||' -> ) as kits , -> GROUP_CONCAT(CONCAT_WS('|', parts.id, parts.name) SEPARATOR '|||') como partes, -> GROUP_CONCAT(CONCAT_WS('|', labor.id, labor.description) SEPARATOR '| ||') como trabajo -> DESDE kits -> LEFT JOIN kits como kits_table ON kits_table .kit_id =kits.id -> UNIÓN EXTERNA IZQUIERDA parts ON parts.kit_id =kits.id -> UNIÓN EXTERNA IZQUIERDA labor ON labor.kit_id =kits.id -> DONDE kits.id =1 -> GRUPO POR kits.id\ G*************************** 1. fila ******************* ******** id:1is_quote:0 kits:2|||Kit dentro del kit|||2|Kit dentro del kit parte 1||3|Kit dentro del kit parte 2|||2|Kit dentro del kit mano de obra 1||3|Kit dentro del kit mano de obra 2 partes:1|Primer kit Parte mano de obra:1|Primer kit mano de obra1 fila en conjunto (0.00 seg) 

ACTUALIZACIÓN 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 '||||' -> ) as kits, -> GROUP_CONCAT(DISTINCT CONCAT_WS( '|', parts.id, parts.name) SEPARATOR '|||') como partes, -> GROUP_CONCAT(DISTINCT CONCAT_WS('|', labor.id, labor.description) SEPARATOR '|||') como mano de obra -> DESDE kits -> UNIÓN IZQUIERDA kits como kits_table ON kits_table.kit_id =kits.id -> UNIÓN EXTERNA IZQUIERDA parts ON parts.kit_id =kits.id -> UNIÓN EXTERNA IZQUIERDA labor ON labor.kit_id =kits.id -> DONDE kits.id =1 -> AGRUPAR POR kits.id\G*************************** 1. fila *************** ************ id:1is_quote:0 kits:2|||Kit dentro del kit|||3|Kit dentro del kit parte 1||4|Kit dentro del kit parte 2|||3| Kit dentro del kit mano de obra 1||4|Kit dentro del kit mano de obra 2 partes:1|Primer kit Parte 1|||2|Primer kit Parte 2 mano de obra:1|Primer kit mano de obra 1|||2|Primer kit mano de obra 21 fila en establecer (0,00 seg)