Skip to content
On this page

테이블 페이지네이션

간단하게 페이지에 적용하기

적용하고 싶은 페이지를 확인합니다.

yaml
- path: properties/active
  blocks:
  - type: query
    resource: mysql.qa
    sqlType: select
    sql: SELECT * FROM properties ORDER BY id ASC LIMIT 100

이와 같이 옵션을 추가합니다.

yaml
- path: properties/active
  blocks:
  - type: query
    resource: mysql.qa
    sqlType: select
    sql: SELECT * FROM properties ORDER BY id ASC LIMIT 100
    
    # pagination 페이지네이션 설정
    paginationOptions:
      enabled: true
      perPage: 10

결과 페이지

기본 페이지 수 조절하기

yaml
paginationOptions:
  enabled: true
  perPage: 100

페이지 단위 조절하기

yaml
paginationOptions:
  enabled: true
  perPage: 10
  perPageDropdown:
  - 10
  - 50
  - 100

perPage 적용 결과

페이지당 행(row) 개수 기본값

perPageDropdown 적용 결과

서버 사이드 페이지네이션(server-side pagination)도 가능한가요?

네, 기존 paginationOptions와 함께 sqlTotal, mode 값을 설정하면 서버 사이드 페이지네이션을 적용할 수 있습니다.

서버 사이드 옵션을 추가하시더라도, 대량의 데이터를 조회하시는 경우 조회 페이지가 정상 작동하지 않을 수 있으니, 쿼리 limit 이나 params 등으로 제한을 걸어주시는 것을 권장합니다.

sqlTotal 쿼리를 쓰지않는 방식도 지원합니다.

yaml
menus:
- path: pagination
  name: pagination
pages:
- path: pagination
  blocks:
  - type: query
    resource: mysql.qa
    sqlType: select
    sql: > 
      SELECT * FROM test_10k 
      WHERE LENGTH(:name) = 0 OR name LIKE CONCAT('%', :name, '%')
      LIMIT :page_offset, :page_limit
    sqlTotal: >
      SELECT COUNT(id) FROM test_10k 
      WHERE LENGTH(:name) = 0 OR name LIKE CONCAT('%', :name, '%')
    mode: remote
    paginationOptions:
      enabled: true
      perPage: 10
    params:
    - key: name

CSV 다운로드를 하는데 전체내역이 안나와요.

서버사이드 페이지네이션은 많은 데이터를 부분적으로 빠르게 조회하는 방식이기 때문에, CSV다운로드는 보고있는 페이지의 결과만 다운로드됩니다.

전체 데이터를 다운로드하고 싶으실 때는 한번에 모든 데이터를 불러오는 일반적인 테이블 조회방법을 이용해주세요.

조회용 페이지와 다운로드 페이지를 나누는것도 좋습니다.

아래는 조회 페이지에 전체 다운로드 액션을 추가하는 예제입니다.

yaml
actions:
  - label: 전체 다운로드
    single: true
    openModal: modal1

modals:
  - path: modal1
    name: 조회 후 다운로드
    subtitle: 시간이 걸릴 수 있어요. 
    blocks:
      - type: query
        resource: mysql
        sqlType: select 
        sql: >
          SELECT * 
          FROM bookings
          WHERE created_at >= :start_date AND created_at <= :end_date
        showDownload: false
        params:
          - key: start_date
            label: 시작일
          - key: end_date
            label: 종료일
        autoload: false
        paginationOptions: 
          enabled: true
          perPage: 10
        actions:
          - label: 다운로드
            single: true
            showDownload: csv
            placement: top right