Posted
Filed under Mysql

[원문]:  http://explainextended.com/2009/07/20/hierarchical-data-in-mysql-parents-and-children-in-one-query/
[원문] : http://blog.naver.com/PostView.nhn?blogId=justis1&logNo=40091860278

Oracle에서는 Connect by로 쉽게 해결되는데 Mysql에서는 고생하시는 분 많으 실것 같아서 올립니다

 

Mysql 계층 구조 (Tree 구조)에서

테이블 구조가 아래와 같은 경우

 

 ID  PARENT_ID ETC
 1 0 ROOT
 2 1

CHILD

 3 2 CHILD OF 2
 4 2 CHILD OF 2
 5 2

CHILD OF 2

Depth가 깊어 질수록 부모노드를 찾기가 힘들어 진다 . 이럴 경우 특정 자식 노드에서 Root까지의 부모노드를 가져오고 싶은 경우 아래의 쿼리를 사용하면 쉽게 해결된다.

 SELECT @r as _ID,
      (
        SELECT @r := PARENT_ID FROM TABLE WHERE ID = _ID
      ) AS _PARENT_ID, @l := @l + 1 AS level
      FROM (
        SELECT @r := 5
      ) vars, TABLE h
      WHERE @r <> 0
   
     )A, TABLE B

 

결과

 _ID

PARENT_ID LEVEL
 1  0  1
 2  1  2
 5  2  3
2012/02/20 14:46 2012/02/20 14:46