Data
id | sku | name | quantity |
---|---|---|---|
1 | 001 | A | 10 |
2 | 002 | B | 10 |
3 | 003 | C | 10 |
4 | 004 | D | 10 |
5 | 005 | E | 10 |
6 | 006 | F | 10 |
7 | 007 | G | 10 |
8 | 008 | H | 10 |
9 | 009 | I | 10 |
10 | 010 | J | 10 |
11 | 011 | K | 10 |
12 | 012 | L | 10 |
13 | 013 | M | 10 |
14 | 014 | N | 10 |
15 | 015 | O | 10 |
16 | 016 | P | 10 |
17 | 017 | Q | 10 |
18 | 018 | R | 10 |
19 | 019 | S | 10 |
20 | 020 | T | 10 |
21 | 021 | U | 10 |
22 | 022 | V | 10 |
23 | 023 | W | 10 |
24 | 024 | X | 10 |
25 | 025 | Y | 10 |
26 | 026 | Z | 10 |
Pada data diatas, kita memiliki 26 baris
data.
Untuk menentukan berapa jumlah halaman (total_page)
, cukup kita bagi jumlah baris (total_data)
dibagi dengan jumlah baris (page_size)
pada setiap halaman.
SELECT COUNT(SKU) as total_data FROM products;
| total_data |
| ---------- |
| 26 |
Sebagai contoh kita akan menampilkan 5 baris (page_size)
pada setiap halaman.
Maka kita akan bagi total_data = 26
dengan 5
, kemudian melakukan pembulatan keatas dengan function CEIL
.
Sehingga menghasilkan berapa jumlah halaman (total_page)
pada data kita. Dengan total_data = 26
dan kita akan menampilkan 5 baris data
pada setiap halamannya, maka kita akan memiliki jumlah halaman (total_page = 5)
.
SELECT CEIL(26/5) AS TOTAL_PAGE;
| total_page |
| ---------- |
| 5 |
LIMIT clause
berfungsi mengembalikan berapa banyak jumlah baris yang akan ditampilkan.
OFFSET clause
berfungsi menentukan jumlah data yang akan dilewati atau dilompati.
Cara kerja OFFSET
yaitu melewati berapa banyak data yang telah di tentukan. Contoh melakukan OFFSET 5 data
pada data berikut.
data: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
OFFSET = 5
hasil = 6, 7, 8, 9, 10
Maka untuk menampilkan data pada page
tertentu, kita akan tentukan value
dari OFFSET
dengan logic
berikut.
OFFSET = (page - 1) * page_size
Menampilkan data halaman ke 1
SELECT SKU, NAME, QUANTITY, (SELECT COUNT(SKU) FROM products) AS TOTAL_DATA,
(SELECT 1) AS PAGE,
(SELECT 5) AS PAGE_SIZE,
(SELECT CEIL(26/5)) AS TOTAL_PAGE FROM products
LIMIT 5 OFFSET (1-1)*5;
sku | name | quantity | total_data | page | page_size | total_page |
---|---|---|---|---|---|---|
001 | A | 10 | 26 | 1 | 5 | 5 |
002 | B | 10 | 26 | 1 | 5 | 5 |
003 | C | 10 | 26 | 1 | 5 | 5 |
004 | D | 10 | 26 | 1 | 5 | 5 |
005 | E | 10 | 26 | 1 | 5 | 5 |
Menampilkan data halaman ke 2
SELECT SKU, NAME, QUANTITY, (SELECT COUNT(SKU) FROM products) AS TOTAL_DATA,
(SELECT 2) AS PAGE,
(SELECT 5) AS PAGE_SIZE,
(SELECT CEIL(26/5)) AS TOTAL_PAGE FROM products
LIMIT 5 OFFSET (2-1)*5;
sku | name | quantity | total_data | page | page_size | total_page |
---|---|---|---|---|---|---|
006 | F | 10 | 26 | 2 | 5 | 5 |
007 | G | 10 | 26 | 2 | 5 | 5 |
008 | H | 10 | 26 | 2 | 5 | 5 |
009 | I | 10 | 26 | 2 | 5 | 5 |
010 | J | 10 | 26 | 2 | 5 | 5 |
Menampilkan data halaman ke 2
SELECT SKU, NAME, QUANTITY, (SELECT COUNT(SKU) FROM products) AS TOTAL_DATA,
(SELECT 3) AS PAGE,
(SELECT 5) AS PAGE_SIZE,
(SELECT CEIL(26/5)) AS TOTAL_PAGE FROM products
LIMIT 5 OFFSET (3-1)*5;
sku | name | quantity | total_data | page | page_size | total_page |
---|---|---|---|---|---|---|
011 | K | 10 | 26 | 3 | 5 | 5 |
012 | L | 10 | 26 | 3 | 5 | 5 |
013 | M | 10 | 26 | 3 | 5 | 5 |
014 | N | 10 | 26 | 3 | 5 | 5 |
015 | O | 10 | 26 | 3 | 5 | 5 |