토막상식 / / 2022. 6. 18. 02:40

페이지네이션(Pagination) 간단정리

한번 생각하면 그만이지만, 할때마다 까먹기 때문에 간단하게 정리를 할 생각이다.

간단하게 페이지네이션은 일반적인 게시판에서 볼 수 있는 하단에 있는 네비게이터를 의미한다

현재 페이지와, 다음/이전 페이지, 다음/이전 탭을 오고가면서 게시글을 볼 수 있다.

간단하게 그냥 다음게시물을 보고싶을때 쓴다

거두절미하고 페이지네이션을 구현하기 위해선 3가지만 정하면 된다.

  1. 총 글의 개수 (total_post)
  2. 한 페이지당 보여줄 글의 개수 (number_per_page)
  3. 하나의 탭당 보여줄 페이지의 개수 (nuber_per_tab)

용어정리를 하나면 총 글의 개수는, 데이터베이스에 있는 모든 글의 개수이며

한 페이지당 보여줄 글의 개수는, 1번페이지에 접속했다면 총 몇개의 글을 보여줄것인지(보통 10, 20개 등 다양하다)

하나의 탭당 보여줄 페이지의 개수는, 위의 사진처럼 탭(내 마음대로 용어를 정했다)당 몇개의 페이지를 보여줄지이다

 

위 3개를 정했다면 나머지는 간단하다. 페이지가 될 개수를 구한다

총 페이지 개수(total_page) = ceil(total_post / number_per_page)

만약 글이 125개이며, 한페이지당 10개씩 보여준다면 125 / 10 = 12.5 에서 올림처리하면 13개가 된다.

나머지 5개의 글은 13페이지에서 처리될것이다.

다음으로 탭을 구현하기 위해 현재 접속해있는 페이지번호에서의 범위를 구한다.

현재 탭의 범위(max_of_tab) = ceil(현재 페이지번호 / number_per_page) * numer_per_page

현재 페이지가 1이라면, 올림(1 / 10) * 10 = 10이 된다. 범위가 정해졌으므로 1부터 10까지 탭을 구현하면 된다.

 

쿼리에서 게시글을 가져오는건 기본키 기준으로 역순정렬을 한 뒤(가장 최근게시글을 앞으로 배치해야 하니까), LIMIT으로 페이지당 가져올 개수만큼 가져오면 된다.

SELECT * FROM 게시글테이블 ORDER BY 기본키 DESC LIMIT 현재 페이지번호 * number_per_page, number_per_page

 

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유