2012-08-05 5 views
0

여러 행을 조인해야하는 MySQL 테이블이 있습니다. 이 같은 테이블보기 :그룹 연결없이 MySQL에서 여러 행을 하나로 결합합니다.

Order_ID | Item_ID | color 
1   1   white 
1   2   red 
2   1   black 
2   1   blue 

나는이처럼 보이는 결과를 산출 할 자신의 Order_ID라고에 따라 행을 결합하려는 :

Order_ID | Item_1_ID | Item_1_color | Item_2_ID | Item_2_color 
1   1    white   2   red 
2   1    black   1   blue 

내가 두 행을 결합 할 수있는 방법이 알고 그룹 concat을 사용하여 하나로 변환하지만 각 필드가 그룹 concat을 사용하는 것처럼 조인되지 않도록 분리되도록 유지하려고합니다. 이미 문을 사용하여 시도

은 다음과 같이 너무 뭔가를 조인

SELECT o.*, o1.* FROM order o INNER JOIN order o1 ON o.Order_ID = o1.Order_ID 

그러나 몇 가지 경우 내가 가입 할 행에 대한

(61)의 한계는 MySQL의에 참여 초과 너무 많은 것입니다.

감사합니다. 감사드립니다. 주문 당 항목의 수를 결정이 다른 매개 변수라는 그룹이 있었다

--- 편집 ---. 표는 다음과 같습니다 순서가 같은 그룹에 속하는

Order_ID | group 
1   1 
2   1 

그래서 한 경우에는 동일한 수의 열을해야하지만 한 그룹과 다른 사이 열 수는 다를 수 있습니다. 그리고 내 쿼리는 하나의 그룹에 대해서만 있기 때문에 컬럼 수의 차이에는 아무런 문제가 없습니다.

+0

얼마나 많은 열이 필요한지 어떻게 알 수 있습니까? 상한선이 있습니까? 실제 쿼리를 생성하기 전에 (?) 계산합니까? – biziclop

+0

안녕하세요, 제 질문을 수정했습니다. 기본적으로 열 수는 유연하지만 실제 쿼리가 생성되기 전에 이미 계산됩니다. 그리고 내가 아는 한 상한은 없지만 수백 또는 그 이상이되지는 않을 것입니다. – raven

+0

이 사이트 또는 인터넷에서 'mysql dynamic pivot'을 검색해보십시오. –

답변

1

GROUP BY order_id을 사용하면 결과를 그룹화하고 설명 된 결과 집합을 제공합니다.

편집 :

당신이 달성하기 위해 무엇을하려고에 따르면, 나는 데이터베이스 정규화에 대해 읽고 당신에게 추천 할 것입니다. 테이블에 프라이 머리 키가없는 것 같지, 그렇지? 귀하의 테이블 구조는 솔직히 말이되지 않습니다. 주문을 하나의 별도 테이블에 저장해야합니다. order_id, user_id, ... 주문 당 항목이있는 것과 같은 하나의 표를 만든 다음 모든 주문에 대해이 주문에 속한 항목을 쿼리합니다.

동일한 결과를 모두 한 행에 추가하지 않고 각 행을 배열로 읽어 들이고 배열을 반복합니다.

+0

음, GROUP BY 절은 그룹별로 그룹화하고 그룹화하지 않습니다. 그러나 대답에 감사드립니다. – raven

+0

@raven은 무엇을 의미합니까, "그것들을 분류합니까?" 알았어. 근데 너 무슨 뜻인지 알 것 같아. 내 대답을 갱신 할거야. – Chris

관련 문제