반응형
SMALL
1. 테이블, 데이터 생성
CREATE TABLE tree (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
parent_id INT DEFAULT NULL,
PRIMARY KEY (id),
FOREIGN KEY (parent_id) REFERENCES tree(id) ON DELETE CASCADE
);
INSERT INTO tree (name, parent_id) VALUES ('Root', NULL);
INSERT INTO tree (name, parent_id) VALUES ('Child 1', 1);
INSERT INTO tree (name, parent_id) VALUES ('Child 2', 1);
INSERT INTO tree (name, parent_id) VALUES ('Grandchild 1-1', 2);
INSERT INTO tree (name, parent_id) VALUES ('Grandchild 1-2', 2);
INSERT INTO tree (name, parent_id) VALUES ('Grandchild 2-1', 3);
INSERT INTO tree (name, parent_id) VALUES ('Grandchild 2-2', 3);
2. 트리구조 쿼리 조회
WITH RECURSIVE tree_path(id, name, parent_id, depth, path) AS (
SELECT id, name, parent_id, 0, CAST(id AS CHAR(200))
FROM tree
WHERE parent_id IS NULL
UNION ALL
SELECT t.id, t.name, t.parent_id, tp.depth + 1, CONCAT(tp.path, ', ', t.id)
FROM tree t
INNER JOIN tree_path tp ON t.parent_id = tp.id
)
SELECT id, name, parent_id, depth, path
FROM tree_path
ORDER BY path;
3. 결과
id name parent_id depth path
-- ---- --------- ----- ----
1 A NULL 0 1
2 B 1 1 1,2
4 D 2 2 1,2,4
6 F 4 3 1,2,4,6
7 G 4 3 1,2,4,7
3 C 1 1 1,3
5 E 3 2 1,3,5
8 H 5 3 1,3,5,8
반응형
'Web Programing! > Mysql' 카테고리의 다른 글
[MySql] db 생성 및 사용자 생성 (2) | 2012.07.16 |
---|---|
[MYSQL] varchar에서 숫자 정렬 시키기 (0) | 2012.06.14 |
[MYSQL] 테이블내 필드명 중 여러가지값중 만족하는 한개의 행을 출력 (0) | 2011.09.10 |
[MYSQL] mysql auto_increment 초기화, idx 초기화 (0) | 2011.09.10 |
[MYSQL] MySQL DUMP 백업 및 복원 (0) | 2011.09.10 |
[MYSQL] mysql 외부접속 (0) | 2011.09.10 |
[MYSQL] Mysql 5.0 계정생성, 디비생성 (0) | 2011.09.10 |