powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / группировка результатов с конкатенацией внутри группы
6 сообщений из 6, страница 1 из 1
группировка результатов с конкатенацией внутри группы
    #38395838
ugodrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть некая таблица
id key val
с данными
1 1 1
1 2 1
1 2 2
2 1 1
2 1 2
2 2 1
3 1 1
3 2 1
3 3 1
...
нужно вернуть при выборке нечто вроде JSON
чтобы результат был примерно таким:
id val
1 '1:1,2:[1,2]'
2 '1:[1,2],2:1'
3 '1:1,2:1,3:1'
впринципе с простой конкатенацией для id = 3 я сделал запросец... но вот как сделать проверку на множественные значения для 1,2 ?
...
Рейтинг: 0 / 0
группировка результатов с конкатенацией внутри группы
    #38395877
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(group by id,key)group by id ?
...
Рейтинг: 0 / 0
группировка результатов с конкатенацией внутри группы
    #38395937
ugodrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SELECT id, cast(CONCAT("{",GROUP_CONCAT(CONCAT(key,":", val) separator ","),"}") as char) val
FROM arraytest
group by id

даёт
'1', '{1:1,2:1,2:2}'
'2', '{1:1,1:2,2:1}'
'3', '{1:1,2:1}'

таким образом id=3 - без нареканий там каждому ключу соответствует одно значение
запрос взял от другой таблицы.. там как раз нет такого соотношения ключей и значений
а вот для id in(1,2) нужно сгруппировать значения т.к. там одному ключу соответствует несколько значений

'1', '{1:1,2:[1,2]}'
'2', '{1:[1,2],2:1}'
...
Рейтинг: 0 / 0
группировка результатов с конкатенацией внутри группы
    #38395961
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вложенный подзапрос. В нём и во внешнем свои группировка и конкатенация.
...
Рейтинг: 0 / 0
группировка результатов с конкатенацией внутри группы
    #38395972
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И будет намного проще, если любая группа будет браться в скобки - даже из 1 элемента.
...
Рейтинг: 0 / 0
группировка результатов с конкатенацией внутри группы
    #38396112
ugodrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, спасибо..

сделал так

SELECT ta.id,CAST(CONCAT('{',GROUP_CONCAT(CONCAT(ta.key,':',ta.val) SEPARATOR ','),'}') as char)
FROM (
SELECT tb.id id, tb.key key, IF(ia.arr = 0, val , concat('[',GROUP_CONCAT(tb.val SEPARATOR ','),']')) val
FROM arraytest tb
LEFT JOIN keyarr ia
ON tb.key = ia.id
GROUP BY tb.id, tb.key
) ta
group by ta.id

просто подцепил таблицу со свойствами ключа.. одно из которых: может ли он содержать несколько значений.
соответственно если может, то конкатенация в группе заключается в [], а если нет, то возвращается одно значение

исходные данные arraytest

'1', '1', '1'
'1', '2', '1'
'1', '2', '2'
'2', '1', '1'
'2', '2', '1'
'2', '2', '2'
'3', '1', '1'
'3', '2', '1'

исходные данные keyarr (id ключа и arr - может иметь множество значений)

'1', '0'
'2', '1'

Результат запроса..

'1', '{1:1,2:[1,2]}'
'2', '{1:1,2:[1,2]}'
'3', '{1:1,2:[1]}'
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / группировка результатов с конкатенацией внутри группы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]