Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Phân trang bằng MySQL LIMIT, OFFSET

Trước hết, không có tập lệnh máy chủ riêng cho mỗi trang, đó chỉ là sự điên rồ. Hầu hết các ứng dụng thực hiện phân trang thông qua việc sử dụng tham số phân trang trong URL. Một cái gì đó như:

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

Bạn có thể truy cập số trang được yêu cầu qua $_GET['page'] .

Điều này làm cho công thức SQL của bạn thực sự dễ dàng:

// 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;

Vì vậy, ví dụ:nếu đầu vào ở đây là page=2 , với 4 hàng trên mỗi trang, truy vấn của bạn sẽ là "

SELECT * FROM menuitem LIMIT 4,4

Vì vậy, đó là vấn đề cơ bản của phân trang. Bây giờ, bạn có thêm yêu cầu là bạn muốn hiểu tổng số trang (để bạn có thể xác định xem "TRANG TIẾP THEO" có nên được hiển thị hay bạn muốn cho phép truy cập trực tiếp vào trang X thông qua một liên kết).

Để làm được điều này, bạn phải hiểu số lượng hàng trong bảng.

Bạn có thể chỉ cần thực hiện điều này với lệnh gọi DB trước khi cố gắng trả lại tập hợp bản ghi giới hạn thực tế của mình (tôi nói TRƯỚC vì rõ ràng bạn muốn xác thực rằng trang được yêu cầu tồn tại).

Điều này thực sự khá đơn giản:

$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. Hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS):MSSQL vs MySQL

  2. Làm cách nào để thay đổi thời gian chờ kết nối Mysql mặc định khi kết nối qua python?

  3. Hoàn thiện hệ thống đăng ký người dùng sử dụng cơ sở dữ liệu PHP và MySQL

  4. Cách thay đổi định dạng ngày giờ trong MySQL

  5. Làm việc với các công cụ cơ sở dữ liệu MySQL