JaeYeopHan / gatsby-starter-bee

🐝Full Package | Simple | Fresh UI | Blog Template :: Let's start to blogging with gatsby-starter-bee!
https://gatsby-starter-bee.netlify.app/
MIT License
688 stars 201 forks source link

database/mysql_recursion_hierachy_query/ #302

Closed utterances-bot closed 2 years ago

utterances-bot commented 2 years ago

(mysql) 재귀쿼리로 계층구조 데이터 표현(id - varchar) | June

재귀쿼리로 계층구조 데이터 표현하기(id(varchar)로) id에 varchar로 계층구조를 담아서 하지 않고 integer로 설계해서 표현하는 설계방법은 여기로. mysql 기준으로 설명 (오라클은 CONNECT BY PRIOR, START WITH를 사용하여 자신의 ID와 연결된 부모 ID를 찾아가 계층적으로 쿼리결과를 뽑을 수 있

https://highjune.dev/database/mysql_recursion_hierachy_query/

luxury515 commented 2 years ago

첫번째 쿼리랑 두번째 쿼리가 결과가 동일하게 나오네요.

입력한 데이터:

CREATE TABLE recursion_test ( id VARCHAR(45) NULL DEFAULT NULL , m_name VARCHAR(50) NULL DEFAULT NULL, depth INT(10) NULL DEFAULT NULL, parent VARCHAR(50) NULL DEFAULT NULL, m_order VARCHAR(50) NULL DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO recursion_test (id,m_name,depth,parent,m_order) VALUES ('ROOT','MENU',0,null,'0'), ('M0','축구',1,'ROOT','0'), ('M1','농구',1,'ROOT','1'), ('M2','야구',1,'ROOT','2'), ('M00','세리에A',2,'M0','0'), ('M01','K-LEAGUE',2,'M0','1'), ('M10','NBA',2,'M1','0'), ('M11','KBL',2,'M1','1'), ('M02','프리메라리그',2,'M0','2'), ('M20','MLB',2,'M2','0'), ('M21','KBO',2,'M2','1');

수행쿼리

SET @var = 'ROOT';

WITH RECURSIVE t3 (id, m_name, depth, parent, m_order) AS

( SELECT t1.id, t1.m_name, t1.depth, t1.parent, t1.m_order FROM practice.recursion_test t1 WHERE t1.parent = @var

UNION ALL

SELECT t2.id, t2.m_name, t2.depth, t2.parent, t2.m_order
FROM practice.recursion_test t2
INNER JOIN t3 ON t2.parent = t3.id

)

SELECT * FROM t3 ORDER BY t3.id, t3.m_order;

luxury515 commented 2 years ago

아 잘되네요.

Insert db query를 댓글로 답니당.

antaejun commented 2 years ago

이거 결국에는 그냥 ID에 알파벳+숫자로 정렬되는 거 아닌가요 ? 계층 필요없이 그냥 select해도 정렬될 거 같은데