| 필드명 | 설명 |
|---|---|
| seq | 글번호(순서). 게시판의 모든 글(댓글, 답글 포함)에 대해 고유한 번호. 자동 증가 (AUTO_INCREMENT). |
| grp | 글그룹. 하나의 글과 그에 속한 모든 답글이 동일한 grp 값을 가짐. |
| grps | 그룹 내 순서. 같은 그룹(grp) 내에서의 정렬 순서를 나타냄. |
| grpl | 그룹 내 깊이. 댓글은 0, 답글은 1 이상으로 계층적 깊이를 나타냄. |
seq: 자동 증가.grp: seq와 동일.grps: 0.grpl: 0.seq: 자동 증가.grp: 부모 글의 grp와 동일.grps:grps보다 큰 값을 가진 모든 글의 grps를 +1 증가.grps는 부모 글의 grps + 1.grpl: 부모 글의 grpl + 1.ORDER BY grp DESC, grps ASC.rep_board1 테이블은 댓글과 답글을 포함한 계층적 데이터를 관리합니다.
CREATE TABLE rep_board1 (
seq INT AUTO_INCREMENT PRIMARY KEY, -- 고유 글번호
grp INT NOT NULL, -- 글그룹 번호
grps INT NOT NULL, -- 그룹 내 순서
grpl INT NOT NULL, -- 그룹 내 깊이
subject VARCHAR(150) NOT NULL, -- 제목
writer VARCHAR(12) NOT NULL, -- 작성자
mail VARCHAR(50), -- 이메일
password VARCHAR(41) NOT NULL, -- 비밀번호
content VARCHAR(2000), -- 내용
hit INT NOT NULL DEFAULT 0, -- 조회수
wip VARCHAR(15) NOT NULL, -- 작성자 IP
wdate DATE NOT NULL DEFAULT CURDATE()-- 작성일
);
모글은 새로운 그룹으로 추가되며, grp 값은 seq와 동일합니다.
INSERT INTO rep_board1 (grp, grps, grpl, subject, writer, mail, password, content, hit, wip, wdate)
VALUES (LAST_INSERT_ID() + 1, 0, 0, '모글 제목', '작성자', 'test@example.com', PASSWORD('1234'), '모글 내용', 0, '127.0.0.1', CURDATE());
답글은 부모 글의 grp와 동일한 그룹에 추가되며, 부모 글의 순서를 기준으로 정렬합니다.
grps 값 조정부모 글의 grps보다 큰 값을 가진 모든 글의 grps를 +1 증가시킵니다.
UPDATE rep_board1
SET grps = grps + 1
WHERE grp = ? AND grps > ?;
부모 글의 grp, grps, grpl 값을 기반으로 답글을 삽입합니다.
INSERT INTO rep_board1 (grp, grps, grpl, subject, writer, mail, password, content, hit, wip, wdate)
VALUES (?, ?, ?, '답글 제목', '작성자', 'test@example.com', PASSWORD('1234'), '답글 내용', 0, '127.0.0.1', CURDATE());
grp: 부모 글의 grp.grps: 부모 글의 grps + 1.grpl: 부모 글의 grpl + 1.ORDER BY grp DESC, grps ASC를 통해 계층적으로 데이터를 정렬합니다.
SELECT seq, grp, grps, grpl, subject, writer, wdate
FROM rep_board1
ORDER BY grp DESC, grps ASC;
| seq | grp | grps | grpl | subject | action |
|---|---|---|---|---|---|
| 1 | 1 | 0 | 0 | 모글1 | board_write |
| 2 | 2 | 0 | 0 | 모글2 | board_write |
| 3 | 1 | 4 | 1 | 1-1 | board_reply |
| 4 | 1 | 2 | 1 | 1-2 | board_reply |
| 5 | 1 | 1 | 1 | 1-3 | board_reply |
| 6 | 1 | 6 | 2 | 1-1-1 | board_reply |
| 7 | 1 | 5 | 2 | 1-1-2 | board_reply |
| 8 | 1 | 3 | 2 | 1-2-1 | board_reply |
쿼리:
SELECT seq, grp, grps, grpl, subject
FROM rep_board1
ORDER BY grp DESC, grps ASC;
출력:
| seq | grp | grps | grpl | subject |
|---|---|---|---|---|
| 2 | 2 | 0 | 0 | 모글2 |
| 1 | 1 | 0 | 0 | 모글1 |
| 5 | 1 | 1 | 1 | 1-3 |
| 4 | 1 | 2 | 1 | 1-2 |
| 8 | 1 | 3 | 2 | 1-2-1 |
| 3 | 1 | 4 | 1 | 1-1 |
| 7 | 1 | 5 | 2 | 1-1-2 |
| 6 | 1 | 6 | 2 | 1-1-1 |
모글2
└── (그룹 내 순서 없음)
모글1
├── 1-3
├── 1-2
│ └── 1-2-1
└── 1-1
├── 1-1-2
└── 1-1-1