반응형
mysql에선 limit과 offset을 활용해서 페이징을 구현할 수 있으며, 퍼포먼스도 좋다.
속성을 별도로 추가하지 않고 튜플의 출력위치를 설정할 수 있기 때문이다.
SELECT *
FROM paging
ORDERS LIMIT 20 OFFSET 0
SELECT *
FROM paging
ORDERS LIMIT 0, 20
LIMIT은 출력할 행의 수이고 OFFSET은 가져올 데이터의 초기 위치값이다.
위의 코드에서 ORDERS LIMIT 0, 20(OFFSET , LIMIT)은
쿼리의 결과로 나온 튜플들의 0번째부터 20개를 출력한다는 말이다.
그렇다면, 10개의 튜플씩 한 페이지가 되게끔 페이징을 한다면 쿼리문은 어떻게 되는가?
글번호순으로 오름차순 출력한다고 한다면 아래와 같다.
//1페이지 : 글번호 1~10
SELECT *
FROM paging
ORDER BY no ASC
LIMIT 0, 10
//2페이지 : 글번호 11~20
SELECT *
FROM paging
ORDER BY no ASC
LIMIT 10, 10
//1페이지 : 글번호 21~30
SELECT *
FROM paging
ORDER BY no ASC
LIMIT 20, 10
근데 보통 최신글을 1페이지로 하기 때문에, 오름차순이 아니라 내림차순으로 출력한다.
SELECT *
FROM paging
ORDER BY no DESC
LIMIT 0, 10
그럼 궁금해진다.
그럼 23개가 끝인 데이터를 LIMIT 20, 10으로 불러오면 어떻게 될까?
오류없이 정상적으로 21~23의 자료만을 반환한다.
이말인즉슨,
전체 행의 갯수에 페이지당 출력할 튜플수를 나눠서 페이지의 갯수만 계산하면 되고,
나머지는 Query로 처리를 할 수 있다는 이야기이다.
반응형
'Database' 카테고리의 다른 글
Procedure 기본 (0) | 2022.05.03 |
---|---|
[MySQL] 방금 수행한 질의 대상 얻어오기 (0) | 2021.08.04 |
Workbench ERD로 DB 만들기 (0) | 2021.04.16 |
mac에서 MySQL Workbench 사용해보기 (0) | 2021.04.16 |
ERD(Entity-Relationship-Diagram) -이론 (0) | 2021.04.16 |