Как соединить поля всех дочерних элементов родительского ряда? - PullRequest
0 голосов
/ 08 мая 2019

Я строю запрос, который будет использоваться для объекта дерева GUI. У меня есть родительская таблица, которая имеет дочернюю таблицу отношения один ко многим. Что мне нужно сделать, чтобы создать пригодный путь для объекта дерева, это объединить все имена дочерних элементов родительской строки. Прямо сейчас с моим текущим запросом я получаю результат по каждому ребенку, но мне нужно общее количество результатов, независимо от того, сколько детей.

Проблема с запросом - строка CONCAT(listassets.name, ", ", listprojects.number) AS text. Я знаю, что это вернет только один результат, поскольку у меня есть только listprojects.nubmer, но как мне сделать так, чтобы я получал каждый номер проекта списка?

В настоящее время я получаю что-то вроде этого

Asset1, 1234
Asset1, 5478
Asset1, 7893
где 1234, 5478, 7893 - номера проектов, связанных с этим активом. Вместо этого я хочу

Asset1 1234. 5478, 7893

Вот мой полный запрос. Для справки, иерархия такова, что у клиентов есть местоположения, у местоположений есть области, у областей есть активы, у активов есть проекты.

SELECT 
CONCAT_WS('/', `listcustomers`.`name`, `listlocations`.`name`, `listareas`.`name`) AS `path`,
CONCAT_WS('/', `listcustomers`.`name`,`listlocations`.`name`, `listareas`.`name`, CONCAT(`listassets`.`name`, ", ", `listprojects`.`number`)) AS `fullPath`,
CONCAT(`listassets`.`name`, ", ", `listprojects`.`number`) AS `text`,
`listassets`.`active` AS `active`,
IF(`listassets`.`active`, 'tree/assetActive.png', 'tree/assetInactive.png') AS `icon`,
IF(`listassets`.`active`, 'tree/assetActive.png', 'tree/assetInactive.png') AS `selectedIcon`,
'color(255,255,255,255)' AS `background`,
'' AS `border`,
'' AS `tootltip`,
'' AS `selectedText`,
'' AS `selectedTooltip`,
'' AS `selectedBorder`,
'color(0,0,0,255)' AS `foreground`,
'color(250,214,138,255)' AS `selectedBackground`,
'color(0,0,0,255)' AS `selectedForeground`,
`listcustomers`.`idx` AS `customerId`,
`listlocations`.`idx` AS `locationId`,
`listareas`.`idx` AS `areaId`,
`listassets`.`idx` AS `assetId`,
NULL AS `projectId`,
NULL AS `projectNum`
FROM
`listassets`
JOIN `listareas` ON `listareas`.`idx` = `listassets`.`parentAreaId`
JOIN `listlocations` ON `listlocations`.`idx` = `listareas`.`parentLocationId`
JOIN `listcustomers` ON `listcustomers`.`idx` = `listlocations`.`parentCustomerId`
JOIN `listprojects` ON `listassets`.`idx` = `listprojects`.`parentAssetId`

Я использую MySQL 5.6

1 Ответ

0 голосов
/ 08 мая 2019

Я нашел ответ, который должен был использовать GROUP_CONCAT и группировать по listassets.id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...