MySQL group_concat и гнездо с другой group_concat

Не уверен, что название правильно объясняет ситуацию, но я постараюсь сделать все возможное, чтобы объяснить здесь.

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

item_id, user_id, group_id
1        2         3
2        2         3
3        4         5
4        2         4

В моем запросе я хочу в формате разделенных запятыми все items_id, сгруппированные по group_id, у меня также есть некоторые дополнительные условия в предложении WHERE, поэтому внутреннее соединение

Что я могу сделать, как с этим запросом

 "SELECT
GROUP_CONCAT( DISTINCT A.item_id ) AS ids
FROM tableA A
INNER JOIN tableB B ON(tableA.id = tableB.id)
WHERE xxxxx
GROUP BY A.group_id

"

Позже я могу зациклить результаты и использовать запятую, разделенную на внутренний цикл, каждый идентификатор в результате

Но я также хочу сгруппировать его по user_id, чтобы сделать что-то подобное

foreach( query_results.... ){
foreach( group_id.... ){
foreach( item_id.... ){
// Display info
}
}
}

Есть идеи по этому поводу?

1

Решение

Использовать 2 GROUP_CONCATS

SELECT GROUP_CONCAT( DISTINCT A.item_id ) AS ids,
GROUP_CONCAT( DISTINCT A.group_id ) AS groups

FROM tableA A
INNER JOIN tableB B ON(tableA.id = tableB.id)
WHERE xxxxx
GROUP BY A.group_id

Зациклите свой ресурс, затем используйте взрываться на groups а также ids цените и зацикливайте их как хотите

0

Другие решения

используя подзапросы, мы можем получить оба itemids, userids как два отдельных столбца

select T1.group_id, T1.itemids, T2.userids

FROM
(SELECT group_id,
GROUP_CONCAT( DISTINCT A.item_id ) AS itemids
FROM table1 A
group by group_id) T1
INNER JOIN
(
SELECT
group_id, GROUP_CONCAT( DISTINCT A.user_id ) AS userids
FROM table1 A
group by group_id
) T2
on T1.group_id = T2.group_id
1

По вопросам рекламы [email protected]