필드명 | 설명 |
---|---|
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