Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL:Вложено GROUP_CONCAT

Опитайте:

mysql> SELECT -> GROUP_CONCAT( -> CONCAT_WS('|||', 0, 1, -> GROUP_CONCAT(CONCAT_WS('|', 2, 3) SEPARATOR '||') -> ) -> ) `тест`;ГРЕШКА 1111 (HY000):Невалидно използване на групова функцияmysql> SELECT -> GROUP_CONCAT( -> CONCAT_WS('|||', 0, 1, -> (SELECT GROUP_CONCAT(CONCAT_WS('|', 2, 3) СЕПАРАТОР '||')) -> ) -> ) `тест`;+------------+| тест |+------------+| 0|||1|||2|3 |+-----------+1 ред в комплект (0,00 сек) 

АКТУАЛИЗИРАНЕ

Една възможна опция:

mysql> ИЗПУСКАНЕ НА ТАБЛИЦА, АКО СЪЩЕСТВУВА `части`, `труд`, `комплекти`;Заявката ОК, 0 засегнати реда (0.00 сек)mysql> СЪЗДАВАНЕ НА ТАБЛИЦА `комплекти` ( -> `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, -> `количество` varchar(45) DEFAULT NULL, -> ПРАВИЛЕН КЛЮЧ (`id`), -> UNIQUE KEY `id_UNIQUE` (`id`), -> KEY `KIT` (` kit_id`) -> );Запитване ОК, засегнати 0 реда (0,00 сек)mysql> СЪЗДАВАНЕ НА ТАБЛИЦА `labor` ( -> `id` int(11) НЕ НУЛВО AUTO_INCREMENT, -> `kit_id` int(11) ПО ПОДРАЗБИРАНЕ NULL, -> `is_quote` tinyint(4) NOT NULL DEFAULT '0', -> `description` varchar(150) NOT NULL, -> `hours` varchar(45) NOT NULL DEFAULT '0', -> ПРАВИЛЕН КЛЮЧ (` id`), -> УНИКАЛЕН КЛЮЧ `id_UNIQUE` (`id`), -> КЛЮЧ `KIT` (`kit_id`) -> );Заявката ОК, 0 засегнати реда (0,00 сек)mysql> СЪЗДАВАНЕ НА ТАБЛИЦА `части` ( -> `id` int(11) НЕ 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) ПО ПОДРАЗБИРАНЕ NULL, -> `sale_price` varchar(45) DEFAULT '0.00', -> `количество` varchar(45) НЕ NULL, -> ПЪРВИЧЕН КЛЮЧ (`id`), -> УНИКАЛЕН КЛЮЧ `id_UNIQUE` (` id`), -> КЛЮЧ `KIT` (`kit_id`) -> );Запитване ОК, 0 засегнати реда (0,00 сек)mysql> ВМЕСТЕ В `комплекти` -> (`id`, -> `kit_id`, -> `е_цитат`, -> `име`, -> `описание`, -> `количество`) -> СТОЙНОСТИ -> (1,0,0,"Основен комплект", "Примерно описание",1);Запитване OK , засегнат 1 ред (0,00 сек)mysql> ВМЕСТЕ В `комплекти` -> (`id`, -> `kit_id`, -> `is_quote`, -> `име`, -> `описание`, -> `количество `) -> СТОЙНОСТИ -> (2,1,0,"Комплект в комплекта", "Примерно описание",1);Запитване ОК, 1 ред засегнат (0,00 сек.)mysql> ВМЕСТЕ ВЪВ `части` -> (`kit_id `, -> `е_цитат`, -> `име`, -> `описание`, -> `продажна_цена`, -> `количество`) -> СТОЙНОСТИ -> (1,0,"Първа част на комплекта", "описание на част","23.5",1);Запитване ОК, 1 ред засегнат (0,00 сек)mysql> ВМЕСТЕ В `части ` -> (`kit_id`, -> `is_quote`, -> `име`, -> `description`, -> `sale_price`, -> `количество`) -> VALUES -> (2,0,"Kit в част 1 на комплекта", "Примерно описание на част","23.5",1);Запитване ОК, 1 ред засегнат (0,00 сек)mysql> ВМЕСТЕ ВЪВ `части` -> (`kit_id`, -> `is_quote`, -> `име`, -> `описание`, -> `продажна_цена`, -> `количество`) -> СТОЙНОСТИ -> (2,0,"Комплект в комплекта част 2", "Описание на примерна част","23.5" ,1);Запитване ОК, 1 ред засегнат (0,00 сек)mysql> ВМЕСТЕ ВЪВ `труд` -> (`kit_id`, -> `is_quote`, -> `описание`, -> `часове`) -> СТОЙНОСТИ -> (1,0,"First Kit labor","1.5");Запитване OK, 1 ред засегнат (0.00 sec)mysql> INSERT INTO `labor` -> (`kit_id`, -> `is_quote`, -> ` описание`, -> `часове`) -> СТОЙНОСТИ -> (2,0,"Комплект в комплекта труд 1","1.5");Заявката е ОК, 1 ред е засегнат (0,00 sec)mysql> INSERT INTO `labor` -> (`kit_id`, -> `is_quote`, -> `description`, -> `hours`) -> VALUES -> (2,0,"Комплект в комплект труд 2 ","1.5");Запитване ОК, 1 ред засегнат (0,00 сек)mysql> ИЗБЕРЕТЕ kits.id, kits.is_quote, -> GROUP_CONCAT( -> CONCAT_WS('|||', kits_table.id, kits_table.name, -> (ИЗБЕРЕТЕ GROUP_CONCAT( -> CONCAT_WS('|', Part.id, Part.name) -> SEPARATOR '||') ОТ части WHERE parts.kit_id =kits_table.id), -> (ИЗБЕРЕТЕ GROUP_CONCAT( ->) CONCAT_WS('|', labor.id, labor.description) -> SEPARATOR '||') ОТ труд WHERE labor.kit_id =kits_table.id) -> ) -> SEPARATOR '||||' -> ) като комплекти , -> GROUP_CONCAT(CONCAT_WS('|', part.id, parts.name) SEPARATOR '|||') като части, -> GROUP_CONCAT(CONCAT_WS('|', work.id, labor.description) SEPARATOR '| ||') като труд -> ОТ комплекти -> LEFT JOIN комплекти като kits_table ON kits_table .kit_id =kits.id -> LEFT OUTER JOIN части 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. ред ******************** ******** id:1is_quote:0 комплекти:2|||Комплект в комплекта|||2|Комплект в комплекта част 1||3|Комплект в комплекта част 2|||2|Комплект в комплекта труд 1||3|Комплект в комплекта труд 2 части:1|Първи комплект Част труд:1|Първи комплект труд1 ред в комплект (0,00 сек) 

АКТУАЛИЗИРАНЕ 2

mysql> ИЗБЕРЕТЕ kits.id, kits.is_quote, -> GROUP_CONCAT(DISTINCT -> CONCAT_WS('|||', kits_table.id, kits_table.name, -> SELECT GROUP_CONCAT(DISTINCT -> CONCAT_WS) ('|', part.id, part.name) -> СЕПАРАТОР '||') ОТ части КЪДЕ части.kit_id =kits_table.id), -> (ИЗБЕРЕТЕ GROUP_CONCAT(DISTINCT -> CONCAT_WS('|', труд. id, labor.description) -> SEPARATOR '||') ОТ труд WHERE work.kit_id =kits_table.id) -> ) -> SEPARATOR '||||' -> ) като комплекти, -> GROUP_CONCAT(DISTINCT CONCAT_WS( '|', part.id, part.name) SEPARATOR '|||') като части, -> GROUP_CONCAT(DISTINCT CONCAT_WS('|', labor.id, labor.description) SEPARATOR '|||') като труд -> ОТ комплекти -> LEFT JOIN комплекти като kits_table ON kits_table.kit_id =kits.id -> LEFT OUTER JOIN части ON parts.kit_id =kits.id -> LEFT OUTER JOIN работа ON labor.kit_id =kits.id -> КЪДЕ kits.id =1 -> GROUP BY kits.id\G****************************** 1. ред *************** ************ id:1is_quote:0 комплекти:2|||Комплект в комплекта|||3|Комплект в комплекта част 1||4|Комплект в комплекта част 2|||3| Комплект в комплект труд 1||4|Комплект в комплект труд 2 части:1|Първи комплект част 1|||2|Първи комплект, част 2 труд:1|Първи комплект труд 1|||2| Първи комплект труд 21 ред в набор (0,00 сек) 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. получите общо за лимит в mysql, като използвате същата заявка?

  2. Добра практика за разделяне на данни в множество бази данни?

  3. codeIgniter използва mysql_real_escape_string() вместо. проблем с връзката с базата данни

  4. Java Class.forName, драйвер за зареждане на JDBC връзка

  5. Как да вмъкна колони на конкретна позиция в съществуваща таблица?