2014-09-26 139 views
1

不知道標題是否可以解釋這種情況,但我會盡力在這裏做最好的解釋。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 

" 

後,我可以循環屆一些額外的條件Ë結果和使用結果

但中分離到內環每一個ID的逗號我也想組由它USER_ID爲了做這樣的事情

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

在這個任何想法?使用子查詢

+0

如果你使用PHP,那麼我真的不明白爲什麼你' d完全可以使用GROUP_CONCAT! – Strawberry 2014-09-26 16:46:22

+0

@Strawberry你是什麼意思? – DannyG 2014-09-26 16:55:00

+0

那麼,爲什麼不只是返回一個有序數組,讓PHP循環呢?在我看來,除非將其與其他聚合函數結合使用,否則在GROUP_CONCAT是解決方案的SQL中沒有問題 - 尤其是在涉及PHP的情況下。 – Strawberry 2014-09-26 17:04:07

回答

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和循環它們兩個,只要你想

+0

這只是造成不必要的工作 – Strawberry 2014-09-26 21:58:40

+0

@Strawberry隨意發佈更好的想法作爲答案,更好的實施=更好的代碼 – 2014-10-02 18:25:02

1

,我們可以得到兩個itemids,用戶ID作爲兩個單獨列

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