
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
13.09.2013, 12:18:19
|
|||
|---|---|---|---|
|
|||
группировка результатов с конкатенацией внутри группы |
|||
|
#18+
есть некая таблица 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 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.09.2013, 12:40:45
|
|||
|---|---|---|---|
|
|||
группировка результатов с конкатенацией внутри группы |
|||
|
#18+
(group by id,key)group by id ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.09.2013, 13:07:14
|
|||
|---|---|---|---|
|
|||
группировка результатов с конкатенацией внутри группы |
|||
|
#18+
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}' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.09.2013, 13:21:16
|
|||
|---|---|---|---|
группировка результатов с конкатенацией внутри группы |
|||
|
#18+
Вложенный подзапрос. В нём и во внешнем свои группировка и конкатенация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.09.2013, 13:25:36
|
|||
|---|---|---|---|
группировка результатов с конкатенацией внутри группы |
|||
|
#18+
И будет намного проще, если любая группа будет браться в скобки - даже из 1 элемента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.09.2013, 14:36:44
|
|||
|---|---|---|---|
|
|||
группировка результатов с конкатенацией внутри группы |
|||
|
#18+
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]}' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=47&tablet=1&tid=1836056]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 226ms |
| total: | 372ms |

| 0 / 0 |
