2012-10-30 5 views
0

열 몇 개를 반환하지만 미리 행 수를 모르는 쿼리를 찾고 있습니다. 내가 찾은 유일한 솔루션은 얼마나 많은 행이 있는지 아는 것입니다. 여기 여러 행 (가변) 행을 여러 행으로 된 하나의 행으로 그룹화합니다.

는 예를 들어 테이블입니다 :

parentID colA  colB 
2   aaaaaa  1000.00 
2   bbbbbb  1500.00 
3   cccccc  500.00 
3   dddddd  700.00 
3   eeeeee  2000.00 

그리고 난 것처럼 볼 필요가 :이 PHP에서 수행되어야 실현

parentID colA(n)  colB(n)  colA(n+1)  colB(n+1)  colA(n+2)  colB(n+2) 
2   aaaaaaa  1000.00  bbbbbb  1500.00  NULL   NULL 
3   cccccc  500.00  dddddd  700.00  eeeeee  2000.00 

하지만 난 3 분의 MySQL의에있을 필요 수출업자 플러그인을 사용하고 있습니다.

편집 : 필요한 최대 열 수를 알고있는 경우이 방법이 있습니까?

+0

은 그것은 PHP에서, 또는 빌드 및 동적 SQL 문을 실행하는 MySQL의 저장 프로 시저와 중, 동적 SQL로 수행해야합니다. 단일 직선 SQL 문은이를 수행 할 수 없습니다. –

+0

역동적 인 컬럼 수에 대해서는 동적 인 SQL을 사용하여 @Michael Berkowski가 제안한 경쟁 조건을 제안 함) – zerkms

+0

나는 두려웠다. 나는 동적 SQL을 조사하거나 내보내기에 대한 새로운 해결책을 찾을 것이다. 탁월하다. 감사. – Falantar014

답변

1

열 개수를 모른 채 SQL로 쿼리를 수행 할 수 없습니다.

SELECT 목록의 열은 쿼리를 구문 분석 할 때 수정되어야합니다. 쿼리가 실행될 때까지는 알 수없는 데이터 상태가 열의 수를 결정한다는 것이 당신이 요구하는 것입니다. 그것은 SQL이 작동하는 방식이 아닙니다.

피벗 형 작업, 또는 데이터 열을 결정하는 모든 쿼리를 수행하려면, 당신은 두 가지 선택이 있습니다

  • 당신이 가져 오는 방법을 많은 별개의 그룹을 발견하는 예비 쿼리를 수행을하고, 이를 사용하여 일치하는 수의 열이있는 쿼리를 작성하십시오.

  • 모든 데이터를 행으로 쿼리하고 응용 프로그램으로 다시 가져온 다음 결과 집합 전체를 코드 내의 데이터 구조 (즉 배열)로 변환합니다.

어쨌든 데이터를 가져 오기 전이나 후에 응용 프로그램 코드를 작성해야합니다.


당신의 의견 : 당신 말이 맞습니다. 이것은 전통적인 피벗은 아니지만 데이터가 열의 수를 늘리고 있다는 점에서 비슷합니다. 즉, 가장 큰 그룹의 행 수의 2 배만큼 많은 열이 필요합니다. 그러나 그룹당 행 수가 다양하기 때문에 이들 모두가 채워지지는 않습니다. 그룹당 고정 행 수가 없으므로 그룹 당 고정 된 수의 열을 채울 수 없습니다.

후자의 전략을 사용하는 것이 좋습니다. 데이터베이스에 저장된대로 데이터를 행으로 가져옵니다. 그런 다음 응용 프로그램 코드에서 사후 처리하십시오. 결과 집합을 반복하고 데이터베이스에서 행을 가져올 때 점진적으로 데이터 구조를 작성하십시오. PHP에서 예를 들어

:

while ($row = $stmt->fetch()) { 
    $data[$row['parentID']][] = $row['colA']; 
    $data[$row['parentID']][] = $row['colB']; 
} 
+0

예를 들어, 필요한 행 수를 찾고 변수 numRows에 저장하면 데이터를 '피벗 (pivot)'할 수 있습니까? 필자는 필자가 컬럼으로 정렬 할 수있는 일종의 일관된 데이터를 가진 컬럼이있는 전통적인 피벗 테이블이 아닙니다. – Falantar014

관련 문제