@grigorie1990

Можно ли в запросе mysql сделать Group_concat в group concat?

Добрый день!
SELECT
`value`,
`unit`,
`productIdArr`,
`idArr`,
`param_src_id`,
GROUP_CONCAT(t1.realValuesArr2) AS realValuesArr FROM (SELECT
	`value_src`.`value` AS `value`,
	`value_src`.`unit` AS `unit`,
	`value_src`.`param_src_id` AS `param_src_id`,
    GROUP_CONCAT(`value_src`.product_id separator ',') AS `productIdArr`,
    GROUP_CONCAT( `value_src`.id separator ',') AS `idArr`,
 GROUP_CONCAT(DISTINCT  JSON_OBJECT(
    'value', `value_dst`.value,
    'param_dst_id', `value_dst`.param_dst_id,
    'type',param_type_id(`value_dst`.param_dst_id),
    'ref_id',ref_id(`value_dst`.param_dst_id),
    'title',param_title(`value_dst`.param_dst_id),
    'valueDstidArr',r(CONCAT(`value_src`.id),`value_dst`.value)
      )) AS `realValuesArr2`
FROM `value_src`
LEFT JOIN `value_dst`
ON `value_src`.id = `value_dst`.value_src_id
	WHERE `value_src`.param_src_id = 104
GROUP BY `value_src`.unit,`value_src`.value, `value_src`.param_src_id, `value_dst`.value) t1
GROUP BY t1.value, t1.unit

5da591f93cd1a537787972.png
В столюцу realValuesarr получется {"type": 4, "title": "Номин ток", "value": "9", "ref_id": 4, "param_dst_id": 85, "valueDstidArr": "670"},
{"type": 4, "title": "Номин ток", "value": "9", "ref_id": 4, "param_dst_id": 85, "valueDstidArr": "683"},
{"type": 4, "title": "Номин ток", "value": "9", "ref_id": 4, "param_dst_id": 85, "valueDstidArr": "696"},
{"type": 4, "title": "Номин ток", "value": "9", "ref_id": 4, "param_dst_id": 85, "valueDstidArr": "708"},
{"type": 4, "title": "Номин ток", "value": "9", "ref_id": 4, "param_dst_id": 85, "valueDstidArr": "720"},
{"type": 4, "title": "Номин ток", "value": "9", "ref_id": 4, "param_dst_id": 85, "valueDstidArr": "732"},
{"type": 4, "title": "Номин ток", "value": "9", "ref_id": 4, "param_dst_id": 85, "valueDstidArr": "744"},
{"type": 4, "title": "Номин ток", "value": "9", "ref_id": 4, "param_dst_id": 85, "valueDstidArr": "756"},
{"type": 4, "title": "Номин ток", "value": "9", "ref_id": 4, "param_dst_id": 85, "valueDstidArr": "769"},{"type...

Хочется чтобы valueDstidArr был числа через запятую, т.е. не много записей а одна,
Строчку 'valueDstidArr',r(CONCAT(`value_src`.id),`value_dst`.value) - concat заменить на group_concat не получается пишет что синтаксическая ошибка.
Возможно ли это или это проще в php написать алгоритм обработки?
Функция r
BEGIN
DECLARE arr text;
SELECT
GROUP_CONCAT(`value_dst`.id separator ',') into  arr FROM `value_dst`
Where value_src_id in (Param1)
and `value_dst`.value = Param2;
RETURN arr;
END


таблица value_dst
5da5943f91fb2320052774.png
таблица value_src
5da59473ce252387637465.png
  • Вопрос задан
  • 218 просмотров
Пригласить эксперта
Ответы на вопрос 1
erge
@erge
Примус починяю
Строчку 'valueDstidArr',r(CONCAT(`value_src`.id),`value_dst`.value) - concat заменить на group_concat не получается пишет что синтаксическая ошибка.


и правильно пишет.
почитайте внимательнее про group_concat
что вы и как собрались конкатенировать??

по данной строчке - r(CONCAT(`value_src`.id),`value_dst`.value)
1 - что есть r?
2- CONCAT(`value_src`.id) c чем кокатенируете??

поэтому здесь не очень понятно что вы хотите загнать в GROUP_CONCAT

И если вы хотите сделать допустим GROUP_CONCAT (`value_src`.id) непонятно зачем у вас GROUP_CONCAT охватывает гораздо шире...???

GROUP_CONCAT(DISTINCT  JSON_OBJECT(
    'value', `value_dst`.value,
    'param_dst_id', `value_dst`.param_dst_id,
    'type',param_type_id(`value_dst`.param_dst_id),
    'ref_id',ref_id(`value_dst`.param_dst_id),
    'title',param_title(`value_dst`.param_dst_id),
    'valueDstidArr',r(CONCAT(`value_src`.id),`value_dst`.value)
      )) AS `realValuesArr2`


Нужно делать GROUP_CONCAT того чего нужно... а не всего подряд и внутрь пытаться запихать еще один GROUP_CONCAT. GROUP_CONCAT объединяет несколько записей в одну, что он будет делать внутри другого GROUP_CONCAT, когда записи уже объединены?

Так же, Имхо... все поля что находятся вне GROUP_CONCAT должны быть в GROUP BY !

я думаю, что вместо вашего GROUP_CONCAT .. AS `realValuesArr2` должно быть как-то так:

...
JSON_OBJECT(
    'value', `value_dst`.value,
    'param_dst_id', `value_dst`.param_dst_id,
    'type',param_type_id(`value_dst`.param_dst_id),
    'ref_id',ref_id(`value_dst`.param_dst_id),
    'title',param_title(`value_dst`.param_dst_id),
    'valueDstidArr', GROUP_CONCAT( r(`value_src`.id,`value_dst`.value) )
      ) AS `realValuesArr2`
...


не знаю что За функция r() И CONCAT одного поля не нужен.

а поля
`value_dst`.value,
`value_dst`.param_dst_id,
должны быть в GROUP BY
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы