MYSQL TREE 구조 구현하기

KyungUp·2023년 6월 6일
0

구성

구조

CREATE TABLE IF NOT EXISTS `Sub_Test` (
  id BIGINT NOT NULL AUTO_INCREMENT,
  parent BIGINT NOT NULL,
  PRIMARY KEY (id)
)`

설명

하위 폴더를 나타내는 각 행은 고유한 id 값을 가지며, parent 열을 사용하여 해당 폴더의 상위 폴더를 지정할 수 있습니다.

즉, pranet 값을 통해, 현재 어느 id 밑에 있는지 표시를 할 수 입니다.

예시

ID			PARENT
1			null
2			null
3			2
4			1
5			3

1. PARENT 값이 null이고, ID값이 1, 2는 root에 위치되있습니다
2. PARENT 값이 1이고, ID값이 4는 ID값이 1번 하위로 위치되있습니다
3. PARENT 값이 2이고, ID값이 3는 ID값이 2번 하위로 위치되있습니다
4. PARENT 값이 3이고, ID값이 5는 ID값이 3번 하위로 위치되있습니다

이런 구조가 되겠습니다.
├── 1
|   ├── 4
├── 2
|   ├── 3
|   |   ├── 5

삭제

재귀함수를 사용하여 삭제 해야 합니다.

# mysql2/promise

async onDeletedRecursiveSQL (id) {
    try {
      let sql;
      sql = `SELECT id, parent FROM Sub_Test WHERE parent = '${id}'`;
      const [childRows] = await pool.query(sql);

      for (const row of childRows) {
        await onDeletedRecursiveSQL(row.id);
      }

      sql = `DELETE FROM Sub_Test WHERE id = '${id}'`;
      await pool.query(sql);

      return true;
    } catch (err) {
      if (err) {
        console.error(err.message);
      	return false;
      }	
    }
  }
profile
Last Epoch하고싶다

0개의 댓글