답변형 게시판 만들기
SQL (for oracle)
-- 글목록 출력 (등록순)
-- 게시판 페이지 알고리즘 Top-N Query 사용
SELECT id, p_id, subject, create_date
FROM (
SELECT a.id, a.p_id, a.subject, a.create_date,
ROWNUM AS rnum
FROM test_boards a
WHERE ROWNUM <= :MAX_ROWS)
WHERE rnum >= :MIN_ROWS
ORDER BY id DESC;
-- 글목록 출력 (답변형)
SELECT id, p_id, title, create_date
FROM (
SELECT a.id, a.p_id, LPAD(' ', 2 * (LEVEL - 1)) || a.subject title,
a.create_date, ROWNUM AS rnum
FROM test_boards a
WHERE ROWNUM <= :MAX_ROWS
START WITH a.p_id IS NULL
CONNECT BY PRIOR a.id = a.p_id
ORDER SIBLINGS BY a.id DESC)
WHERE rnum >= :MIN_ROWS;
-- 글올리기
INSERT INTO test_boards VALUES (
(SELECT MAX(id) + 1 FROM test_boards), NULL, :SUBJECT, :CONTENT, SYSDATE);
-- 글내용 보기
SELECT id, p_id, subject, content, create_date
FROM test_boards
WHERE id = :ID;
-- 답글쓰기
INSERT INTO test_boards VALUES (
(SELECT MAX(id) + 1 FROM test_boards), :PNUM,
'[엮인글] ' || :SUBJECT, :CONTENT, SYSDATE);
-- 글 삭제 (자식 글이 존재하면 삭제 불가)
SELECT CONNECT_BY_ISLEAF FROM test_boards
WHERE id = :ID
START WITH p_id IS NULL
CONNECT BY PRIOR id = p_id;
DELETE FROM test_boards WHERE id = :ID
-- 글 수정
UPDATE test_boards
SET subject = :SUBJECT, content = :CONTENT, create_date = SYSDATE
WHERE id = :ID;