MySQL group_concat并与另一个group_concat嵌套

时间:2014-09-26 16:15:28

标签: php mysql sql group-concat

不确定标题是否正确解释了情况,但我会尽力在这里做最好的解释。

我有一个表,其中3个字段链接到其他表,我希望以下列方式对所有行进行分组:

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

在我的查询中,我想用逗号分隔格式按group_id分组的所有items_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

 "

稍后我可以循环结果并使用逗号分隔到内部循环结果

中的每个id

但我也想用user_id对它进行分组,以便做这样的事情

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

有关于此的任何想法吗?

2 个答案:

答案 0 :(得分:1)

使用子查询,我们可以将两个项目,用户作为两个单独的列

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 :(得分:0)

使用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

循环您的资源,然后在groupsids值上使用Explode并根据需要循环播放