Не уверен, что название правильно объясняет ситуацию, но я постараюсь сделать все возможное, чтобы объяснить здесь.
У меня есть таблица с 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
}
}
}
Есть идеи по этому поводу?
Использовать 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
цените и зацикливайте их как хотите
используя подзапросы, мы можем получить оба 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