sql >> Databáze >  >> RDS >> Mysql

MySQL:Vnořená GROUP_CONCAT

Zkuste:

mysql> SELECT -> GROUP_CONCAT( -> CONCAT_WS('|||', 0, 1, -> GROUP_CONCAT(CONCAT_WS('|', 2, 3) SEPARATOR '||') -> ) -> ) `test`;CHYBA 1111 (HY000):Neplatné použití skupinové funkcemysql> SELECT -> GROUP_CONCAT( -> CONCAT_WS('|||', 0, 1, -> (SELECT GROUP_CONCAT(CONCAT_WS('|', 2, 3) SEPARATOR '||')) -> ) -> ) `test`;+-------------+| test |+--------------+| 0|||1|||2|3 |+-------------+1 řádek v sadě (0,00 s) 

AKTUALIZACE

Jedna z možných možností:

mysql> DROP TABLE IF EXISTS `parts`, `labor`, `kits`;Dotaz je v pořádku, 0 ovlivněných řádků (0,00 s)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, -> `množství` varchar(45) VÝCHOZÍ NULL, -> PRIMÁRNÍ KLÍČ (`id`), -> UNIQUE KEY `id_UNIQUE` (`id`), -> KEY `KIT` (` kit_id`) -> );Dotaz je v pořádku, ovlivněno 0 řádků (0,00 s)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`) -> );Dotaz je v pořádku, 0 ovlivněných řádků (0,00 s)mysql> CREATE TABLE `části` ( -> `id` int(11) NOT 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`) -> );Dotaz OK, ovlivněno 0 řádků (0,00 s)mysql> INSERT INTO `kits` -> (`id`, -> `kit_id`, -> `is_quote`, -> `name`, -> `description`, -> `quantity`) -> VALUES -> (1,0,0,"Hlavní sada", "Ukázkový popis",1);Dotaz OK , ovlivněný 1 řádek (0,00 s)mysql> INSERT INTO `kit` -> (`id`, -> `kit_id`, -> `is_quote`, -> `name`, -> `description`, -> `quantity `) -> VALUES -> (2,1,0,"Kit v sadě", "Ukázkový popis",1);Dotaz je v pořádku, ovlivněn 1 řádek (0,00 s)mysql> INSERT INTO `parts` -> (`kit_id `, -> `je_nabídka`, -> `název`, -> `popis`, -> `sale_price`, -> `množství`) -> VALUES -> (1,0,"První díl sady", "Popis dílu","23,5",1);Dotaz je v pořádku, ovlivněn 1 řádek (0,00 s)mysql> INSERT INTO `díly ` -> (`kit_id`, -> `is_quote`, -> `name`, -> `description`, -> `sale_price`, -> `quantity`) -> VALUES -> (2,0,"Kit v rámci sady 1", "Sample Part Description","23.5",1);Dotaz OK, ovlivněn 1 řádek (0,00 s)mysql> INSERT INTO `parts` -> (`kit_id`, -> `is_quote`, -> `název`, -> `description`, -> `sale_price`, -> `quantity`) -> VALUES -> (2,0,"Kit v rámci sady, část 2", "Ukázkový popis dílu","23,5" ,1);Dotaz je v pořádku, ovlivněn 1 řádek (0,00 s)mysql> INSERT INTO `labor` -> (`kit_id`, -> `is_quote`, -> `description`, -> `hours`) -> VALUES -> (1,0,"First Kit labor","1.5");Dotaz je v pořádku, ovlivněn 1 řádek (0,00 s)mysql> INSERT INTO `labor` -> (`kit_id`, -> `is_quote`, -> ` popis`, -> `hodiny`) -> VALUES -> (2,0,"Kit v rámci sady práce 1","1.5");Dotaz je v pořádku, ovlivněn 1 řádek (0,00 sec)mysql> INSERT INTO `labor` -> (`kit_id`, -> `is_quote`, -> `description`, -> `hours`) -> VALUES -> (2,0,"Kit within kit labor 2 ","1.5");Dotaz je v pořádku, ovlivněn 1 řádek (0,00 s)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 work WHERE labor.kit_id =kits_table.id) -> ) -> SEPARATOR '||||' -> ) jako sady , -> GROUP_CONCAT(CONCAT_WS('|', parts.id, parts.name) SEPARATOR '|||') jako části, -> GROUP_CONCAT(CONCAT_WS('|', labor.id, labor.description) SEPARATOR '| ||') jako práce -> ZE sad -> LEFT JOIN sady jako sady_tabulka NA tabulce_sad .kit_id =kits.id -> LEFT OUTER JOIN parts ON parts.kit_id =kits.id -> LEFT OUTER JOIN work ON labor.kit_id =kits.id -> WHERE kits.id =1 -> GROUP BY kits.id\ G********************************* 1. řádek ******************** ******** id:1is_quote:0 sad:2|||Sada v sadě|||2|Sada v části sady 1||3|Sada v části sady 2|||2|Sada v rámci sady práce 1||3|Práce sady v rámci sady 2 díly:1|První práce součásti sady:1|Práce první sady1 řada v sadě (0,00 s) 

AKTUALIZACE 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('|', prac. id, labor.description) -> SEPARATOR '||') FROM work WHERE labor.kit_id =kits_table.id) -> ) -> SEPARATOR '||||' -> ) jako sady, -> GROUP_CONCAT(DISTINCT CONCAT_WS( '|', parts.id, parts.name) SEPARATOR '|||') jako části, -> GROUP_CONCAT(DISTINCT CONCAT_WS('|', labor.id, labor.description) SEPARATOR '|||') jako práce -> OD kitů -> LEFT JOIN kits as kits_table ON kits_table.kit_id =kits.id -> LEFT OUTER JOIN parts ON parts.kit_id =kits.id -> LEFT OUTER JOIN work ON labor.kit_id =kits.id -> WHERE kits.id =1 -> GROUP BY kits.id\G******************************** 1. řádek *************** ************ id:1is_quote:0 sad:2|||Sada v sadě|||3|Sada v části sady 1||4|Sada v části sady 2|||3| Práce sady v rámci sady 1||4|Sada v rámci práce sady 2 díly:1|První část sady 1|||2| Práce první sady část 2:1| Práce první sady 1|||2| Práce první sady 21 řádků set (0,00 s) 


  1. Jak naplánovat dotaz MySQL?

  2. Jak vybrat data ze dvou tabulek pomocí jednoho dotazu

  3. Chyba zabezpečení Joomla SQL Injection

  4. Jak vytvořit řadová čísla v PostgreSQL