본문 바로가기
programming/DataManage

게시판 페이징 mysql 5.x limit 를 이용한 게시물 나눠서 가져오기

by 개코 - 개발과 코딩 2021. 8. 7.

mysql의 limit 키워드를 사용하면 많은 게시물 중 일부분만을 가져올 수 있다. 데이터베이스에서 값을 일부분만을 가져오면 굳이 서버단인 백엔드에서의 작업이 줄어들고 데이터를 요청하고 가져오는 양이 줄어들기 때문에 성능향상에 도움이 되기도 한다.

게시판 페이징 mysql limit
게시판 페이징 mysql limit

 

mysql limit

mysql 의 limit 는 데이터베이스 테이블의 값들 중 일부분만을 가져온다.

기본 문형은 다음과 같다.

시작위치는 Offset으로 표현하고, 게시물 수는 row count 로 표현한다.

시작위치는 생략가능하며, 게시물 수는 반드시 작성해야 한다.

SELECT *
  FROM 테이블명
 LIMIT [시작위치 OFFSET], 게시물 수 ROW_COUNT

만약 시작위치가 생략했다면 조회된 게시물의 처음위치에서 게시물 수만큼 값을 가져오게 된다.

아래 2개의 쿼리는 서로 의미가 같고, 결과물도 같다.

SELECT *
  FROM 테이블명
 LIMIT 5
 
SELECT *
  FROM 테이블명
 LIMIT 0, 5

위의 쿼리는 서로 다르지만 조회된 게시물부터 5개 가져오는 의미는 같다.

그렇다면 게시판 페이징에서 어떻게 이용하면 될까?

 

시작위치 offset

mysql 에서 select 를 하면 많은 데이터가 조회되는 것을 볼 수 있다.

offset은 행의 위치를 말하는 것이며 0부터 시작한다.

아래의 코드는 어떤 테이블에서 offset이 5인 지점에서 게시물 수 5개를 조회하라는 것이다.

offset은 0부터 시작한다.

게시물의 행이 6번째인 곳부터 게시물 5개를 읽어 들어온다.

SELECT *
  FROM 테이블명
 LIMIT 5, 5

 

게시판 페이징 계산하여 조회하기

화면단인 프론트엔드에서 페이징의 숫자를 클릭하면 숫자에 해당하는 테이블 위치의 게시물을 가져오게 될 것이다.

조건은 한페이지에 게시물이 5개 보여준다고 가정해 보자.

1페이지부터 3페이지까지의 예를 들어보자.

-- 1페이지 게시물 5개
SELECT *
  FROM 테이블명
 LIMIT 0, 5
 
 -- 2페이지 게시물 5개
 SELECT *
  FROM 테이블명
 LIMIT 5, 5
 
 -- 3페이지 게시물 5개
 SELECT *
  FROM 테이블명
 LIMIT 10, 5

앞의 offset 번호가 페이지가 변할 때마다 계산해 주면 된다.

단순한 수식이 하나 나올 수 있다.

곱하기 5를 해주는 이유는 게시물이 5개씩 이기 때문에 offset또한 5번째씩 시작위치가 바뀐다.

1 페이지 : (1-1)*5 : 0 offset : 게시물5개
2 페이지 : (2-1)*5 : 5 offset : 게시물5개
3 페이지 : (3-1)*5 : 10 offset : 게시물5개
4 페이지 : (4-1)*5 : 15 offset : 게시물5개
5 페이지 : (4-1)*5 : 15 offset : 게시물5개

최종쿼리는 다음과 같다.

수식은 서버단인 백엔드에서 해도 되고, 화면단인 프론트엔드에서 해도 된다.

SELECT * 
  FROM 테이블명
 LIMIT (화면에서 넘어온 페이지번호 - 1) * 5, 5
반응형

댓글