[원문]: 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 |