[SQL] 게시판 페이징을 위한 리스트 정렬 쿼리
2017. 4. 6. 17:10ㆍDatabase
게시판 페이징 처리를 위한 리스트 정렬 쿼리문을 작성해보자
우선 게시판 테이블과 시퀀스를 생성한 후 임의의 데이터를 삽입한다.
--게시판(Bulletin Board System) 테이블 생성
CREATE TABLE BBS(
ARTICLE_NUMBER NUMBER PRIMARY KEY,
ID VARCHAR2(15) NOT NULL,
TITLE VARCHAR2(15) NOT NULL,
CONTENT CLOB NOT NULL,
GROUP_ID NUMBER NOT NULL,
DEPTH NUMBER NOT NULL,
POS NUMBER NOT NULL, --position, 게시글 순서를 조정
HIT NUMBER NOT NULL, --조회수
WRITE_DATE DATE NOT NULL,
FILE_NAME VARCHAR2(300)
);
--시퀀스 생성
CREATE SEQUENCE BBS_SEQ
START WITH 1
INCREMENT BY 1;
--임의의 데이터 삽입, 20회 정도 반복한다.
INSERT INTO BBS
VALUES (bbs_seq.nextval
, 'kim'
, bbs_seq.currval || '번 글'
, bbs_seq.currval || '번 글 내용입니다.'
, bbs_seq.currval --group_id
, 0 --depth
, 0 --pos
, 0 --hit
, sysdate
, null);
COMMIT;
아래 쿼리문들은 페이징을 위한 리스트 정렬 쿼리가 어떻게 만들어졌는지에 대한 과정이다. 마지막 쿼리문에 조회할 페이지 시작번호, 끝번호를 조건으로 하여 해당되는 게시글들을 조회할 수 있다.
SELECT rownum, bbs.*
FROM bbs
WHERE rownum BETWEEN 10 AND 20;
--BETWEEN A AND B에서 A의 값이 1이 아니라면 rownum은 순서를 찾을 수 없다.
--아무런 결과가 출력되지 않을 것이다.
--쿼리를 실행하면 WHERE절부터 수행하기 때문에 SELECT 하기 전까지 rownum을 찾을 수 없기 때문이다.
SELECT bbs.*
FROM (
SELECT rownum AS row_num, bbs.* --rownum은 익명으로 사용해야한다
FROM bbs
--결과는 출력되지만,
--게시글의 순서를 최신순(group_id DESC), 본글과 답글순(pos ASC)으로 정렬이 필요하다.
) bbs
WHERE row_num BETWEEN 10 AND 20;
SELECT bbs.*
FROM (
SELECT rownum AS row_num, bbs.* --rownum은 익명으로 사용해야한다.
FROM bbs
ORDER BY group_id DESC, pos ASC --게시글 순서 정렬
) bbs
WHERE row_num BETWEEN 10 AND 20;
--원하는 데이터를 가져오지 못한다.
--ORDER BY가 rownum값을 만드는 데 영향을 주지 않는 듯 하다.
SELECT rownum, bbs.*
FROM (
SELECT bbs.*
FROM bbs
ORDER BY group_id DESC, pos ASC
) bbs
WHERE rownum BETWEEN 10 AND 20; --처음과 같이 rownum을 찾을 수 없다.
--만약 rownum이 무조건 1부터 시작한다면 더이상의 과정은 필요없다.
--'답글 보기' 기능에는 이 방식을 사용할 것이다.
--위와 같은 과정을 통해서 이러한 쿼리문이 만들어졌다.
SELECT bbs.*
FROM (
SELECT rownum AS row_num, bbs.*
FROM (
SELECT bbs.*
FROM bbs
ORDER BY group_id DESC, pos ASC
) bbs
) bbs
WHERE row_num BETWEEN 10 AND 20;
[rownum을 이용한 게시판 페이징 참고]
'Database' 카테고리의 다른 글
| [PostgreSQL] PL/Python (0) | 2024.12.06 |
|---|---|
| [SQL] 테이블 수동 백업 (0) | 2017.03.30 |
| [Oracle] 테이블스페이스, 사용자, 테이블 생성하기 (0) | 2017.02.24 |