2014-09-26 2 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 나는 또한 내부 내가이 쿼리

"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 

" 

나중에 내가 루프가 일 수와 같이 할 수있는

가입 이유 WHERE 절에 몇 가지 추가 조건이 전자 결과와 결과

그러나 내 내부 루프마다 ID를 구분 쉼표를 사용하여 나는이에이

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

어떤 아이디어 그런 짓을하기 위해 USER_ID에 의해 그룹이 원하는? 하위 쿼리를 사용하여

+0

PHP를 사용하는 경우, GROUP_CONCAT을 사용하십시오! – Strawberry

+0

@Strawberry 당신은 무엇을 의미합니까? – DannyG

+0

글쎄 왜 정렬 된 배열을 반환하지 않고 PHP 루프를 넘기지 않을까요? 내 생각에 다른 집계 함수와 함께 사용하지 않는 한, GROUP_CONCAT이 해결책 인 SQL에는 문제가 없다. 특히 PHP가 관련된 부분은 그렇다. – Strawberry

답변

0

같은 사용자 ID를 사용하여 2 GROUP_CONCATS 모두 itemids를 얻을 수 있습니다

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

+0

@Strawberry 답변을 더 잘 작성하면 더 좋은 아이디어를 게시 할 수 있습니다. –

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