Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Paginasi menggunakan MySQL LIMIT, OFFSET

Pertama, tidak memiliki skrip server terpisah untuk setiap halaman, itu hanya kegilaan. Sebagian besar aplikasi mengimplementasikan pagination melalui penggunaan parameter pagination di URL. Sesuatu seperti:

http://yoursite.com/itempage.php?page=2

Anda dapat mengakses nomor halaman yang diminta melalui $_GET['page'] .

Ini membuat formulasi SQL Anda sangat mudah:

// determine page number from $_GET
$page = 1;
if(!empty($_GET['page'])) {
    $page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT);
    if(false === $page) {
        $page = 1;
    }
}

// set the number of items to display per page
$items_per_page = 4;

// build query
$offset = ($page - 1) * $items_per_page;
$sql = "SELECT * FROM menuitem LIMIT " . $offset . "," . $items_per_page;

Jadi misalnya jika input di sini adalah page=2 , dengan 4 baris per halaman, kueri Anda adalah"

SELECT * FROM menuitem LIMIT 4,4

Jadi itulah masalah dasar pagination. Sekarang, Anda memiliki persyaratan tambahan bahwa Anda ingin memahami jumlah total halaman (sehingga Anda dapat menentukan apakah "HALAMAN BERIKUTNYA" harus ditampilkan atau jika Anda ingin mengizinkan akses langsung ke halaman X melalui tautan).

Untuk melakukan ini, Anda harus memahami jumlah baris dalam tabel.

Anda cukup melakukan ini dengan panggilan DB sebelum mencoba mengembalikan kumpulan catatan terbatas Anda yang sebenarnya (saya katakan SEBELUM karena Anda jelas ingin memvalidasi bahwa halaman yang diminta ada).

Ini sebenarnya cukup sederhana:

$sql = "SELECT your_primary_key_field FROM menuitem";
$result = mysqli_query($con, $sql);
$row_count = mysqli_num_rows($result);
// free the result set as you don't need it anymore
mysqli_free_result($result);

$page_count = 0;
if (0 === $row_count) {  
    // maybe show some error since there is nothing in your table
} else {
   // determine page_count
   $page_count = (int)ceil($row_count / $items_per_page);
   // double check that request page is in range
   if($page > $page_count) {
        // error to user, maybe set page to 1
        $page = 1;
   }
}

// make your LIMIT query here as shown above


// later when outputting page, you can simply work with $page and $page_count to output links
// for example
for ($i = 1; $i <= $page_count; $i++) {
   if ($i === $page) { // this is current page
       echo 'Page ' . $i . '<br>';
   } else { // show link to other page   
       echo '<a href="/menuitem.php?page=' . $i . '">Page ' . $i . '</a><br>';
   }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - Jadikan Bidang yang Ada Unik

  2. Menggunakan Database Relasional MySQL di Arch Linux

  3. Cara Memformat Angka Sebagai Mata Uang di MySQL

  4. Apa yang Harus Dipantau di MySQL 8.0

  5. SQL - Perbarui banyak catatan dalam satu kueri