728x90
๐ ์ค๋ผํด์์๋ start with ~ connect by ๋ก ๊ณ์ธตํ ์ฟผ๋ฆฌ๋ฅผ ๋ง๋ค ์ ์๋๋ฐ... ใ
ใ
mysql ์ ์๋จ.
๐ ์ฌ๊ท๋ฅผ ์ด์ฉํด์ ๊ณ์ธตํ ์ฟผ๋ฆฌ๋ฅผ ๋ง๋ค๊ธฐ!
CREATE TABLE `menu` (
`menu_id` int NOT NULL,
`menu_name` varchar(45) DEFAULT NULL,
`role` varchar(45) DEFAULT NULL,
`status` varchar(1) DEFAULT NULL,
`par_menu_id` varchar(45) DEFAULT NULL,
`menu_path` varchar(45) DEFAULT NULL,
`order_num` int DEFAULT NULL,
`reg_date` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`menu_id`)
)
INSERT INTO `menu` VALUES
(1,'๊ด๋ฆฌ์','admin','1',NULL,NULL,1,'2024-04-23 11:38:22')
,(2,'์ฌ์ฉ์','user','1',NULL,NULL,2,'2024-04-23 12:41:12')
,(3,'์ํ','user','1','2','/movie/list',1,'2024-04-23 12:28:54')
,(4,'์๋งค','user','1','2','/booking/list',2,'2024-04-23 12:41:12')
,(5,'๊ทน์ฅ','user','1','2','/theater/list',3,'2024-04-23 12:41:12')
,(6,'์ ์ฒด์ํ','user','1','3','/movie/list',2,'2024-04-27 05:06:24')
,(7,'์์ ','user','1','2',NULL,1,'2024-04-29 02:53:17')
,(8,'์ผ๊ฐ','user','1','7',NULL,1,'2024-04-29 03:00:53')
,(9,'์ฃผ๊ฐ','user','1','7',NULL,2,'2024-04-29 03:26:15');
WITH RECURSIVE cte AS (
SELECT menu_id, menu_name, role, status, par_menu_id, menu_path, order_num,
CAST(CONCAT(order_num, '_', menu_id) as CHAR(40)) AS v_ord,
1 AS lvl
FROM menu
WHERE par_menu_id IS NULL AND status = '1'
AND role = 'user'
UNION ALL
SELECT t.menu_id, t.menu_name, t.role, t.status, t.par_menu_id, t.menu_path, t.order_num,
CONCAT(cte.v_ord, '->', t.order_num, '_', t.menu_id) AS v_ord,
cte.lvl + 1
FROM menu t
INNER JOIN cte ON t.par_menu_id = cte.menu_id
where t.status = '1'
)
SELECT * FROM cte
WHERE par_menu_id IS NOT NULL
ORDER BY v_ord
๐ ๊ฒฐ๊ณผ ?
+) ๐์์ฉ!
- ์์ฉ 1. status ์ปฌ๋ผ์ ์ด์ฉํด์, "์ฌ์ฉ", "๋ฏธ์ฌ์ฉ"์ ๊ตฌ๋ฌธํด์ ์ฌ์ฉํ๊ณ ์ถ์.
- ์ต์๋จ ๋ถ๋ชจ๊ฐ "๋ฏธ์ฌ์ฉ" ์ด๋ผ๋ฉด ๊ทธ ์ดํ์ ์์๋ค์ ๋ชจ๋ ๋ฏธ์ฌ์ฉ์ผ๋ก ๊ฐ์ฃผ.
- 1: ์ฌ์ฉ, 9: ๋ฏธ์ฌ์ฉ
--> ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ
- ์์ฉ 2. order_num ์ปฌ๋ผ์ ์ด์ฉํด์, ํ์ ๋ฉ๋ด์ ์์๋ฅผ ์ ํ๊ณ ์ถ์.
- ๊ด๋ฆฌ์ ํ์ด์ง์์ ์ํ ๋๋ง๋ค ์์ ํ๊ณ ์ถ์.
- ๋์ค์ ๋ง๋ ๋ฉ๋ด๊ฐ ๋ ์์ ๋ณด์ด๊ฒ ํ๊ณ ์ถ์ ์๋ ์์ผ๋๊น!
- CONCAT(cte.v_ord, '->', t.order_num, '_', t.menu_id) AS v_ord
- 1. ์ฌ๊ท๋ก ๋์์จ ์ ๋ ฌ์์ -> 2.์ค์ ํ ์ ๋ ฌ ์์ _ ๋ฉ๋ดid
- ์ ๋ ฌ์์ _ ๋ฉ๋ดid ๋ก ํ๋ ์ด์ ๋,,
์ฌ๋์ด ์ค์ ํ๋ค๋ณด๋ ๊ฐ์ ์ ๋ ฌ์์๋ฅผ ๋ฃ๋ ๊ฒฝ์ฐ๋ ์์ ์ ์์ผ๋๊น..
- ์ ๋ ฌ์์ _ ๋ฉ๋ดid ๋ก ํ๋ ์ด์ ๋,,
--> ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ
์ถ์ฒ :
- mysql ํ์ด์ด๋ผํค hierarchy Tree ๊ตฌ์กฐ
https://dalili.tistory.com/228
http://www.kkujunhee.net/bbs/board.php?bo_table=db&wr_id=64
https://12teamtoday.tistory.com/25
๊ฐ๋ฐ ๊ณต๋ถ๋ฅผ ์ํ ๋ธ๋ก๊ทธ ์ ๋๋ค.
์ค๋ฅ๊ฐ ์๋ค๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์!
๊ฐ์ฌํฉ๋๋ค.

728x90