2012-01-31 6 views
1

MySQL 만 사용하여 쿼리/함수를 작성하여 다음 결과를 얻을 수 있습니까?재귀 적으로 테이블의 합계를 가져 오려고 시도합니다.

예 테이블 :

 
+------------+ 
| ID | Child | 
+------------+ 
| 1 | 2  | 
| 1 | 3  | 
| 2 | NULL | 
| 3 | 4  | 
| 4 | 5  | 
| 4 | 6  | 
| 5 | NULL | 
| 6 | NULL | 
| 7 | NULL | 
+------------+ 

예 결과 : 아이들 ... 그리고 자녀의 각 ID의 수와 모든 :

 
+------------+ 
| ID | Child | 
+------------+ 
| 1 | 5  | 
| 2 | 0  | 
| 3 | 3  | 
| 4 | 2  | 
| 5 | 0  | 
| 6 | 0  | 
| 7 | 0  | 
+------------+ 

일반 영어

.

 
1's children are: 2, 3, 4, 5, 6 
3's children are: 4, 5, 6 
4's children are: 5, 6 

가 나는 SUM (COUNT (아이가)) 한 후, 서브 쿼리/기능/그룹의 일부 영리한 사용과 관련이있다 생각.

+1

참조 : http://stackoverflow.com/questions/2191847/sql-cte를 -counting-childs-recursion – Ara

+1

Ara의 링크 된 답변과 관련된 "with"를 MySQL과 함께 사용 : http://stackoverflow.com/questions/1382573/how-do-you-use-with-clause-in-mysql –

답변

1

당신이를 좋아하지만 (예는, 죄송 길이 : P)이 article를 살펴하지 않을거야

+0

불행히도 그들은 lft 및 rgt 열을 사용하여 "트릭"을 사용하고 있습니다. 이 두 열을 사용하여이 문제를 해결하고 싶습니다. –

+1

음 ... AFAIK는 불가능합니다. 고정 된 (그리고 작은) 양의 자식이있는 경우 모든 자식에 대한 하위 쿼리를 만들 수있는 방식으로이를 해결할 수 있습니다. 그러나 여러 단계의 깊이에 관해서는 MySQL이 재귀 쿼리를 지원하지 않기 때문에 해결할 수있을 것이라고는 생각하지 않습니다. 게다가, 단 하나의 컬럼을 추가하는 데 많은 오버 헤드가 없다. :) –

+0

귀하의 답변은 내가 알 수있는 한 정확하게 얻을 수 있습니다. 즉, 새로운 MySQL API에서 재귀 함수/프로 시저를 생성 할 수 없다면 ...? –

관련 문제