Cộng đồng chia sẻ tri thức Doc24.vn

Phân trang với PHP

Gửi bởi: Phạm Thọ Thái Dương vào ngày 2019-10-24 10:21:38

Nó luôn luôn có thể là truy vấn lệnh SQL SELECT của bạn có thể tạo hàng nghìn record. Nhưng việc hiển thị tất cả record này trên một trang không bao giờ là ý tưởng tốt. Vì thế chúng ta có thể phân chia kết quả này thành nhiều trang khác nhau theo yêu cầu của bạn.

Phân trang (Paging) nghĩa là truy vấn của bạn cho kết quả trong nhiều trang, thay vì chỉ đặt chúng ở trong một trang dài.

MySQL giúp đỡ việc phân trang bởi sử dụng mệnh đề LIMIT mà sẽ nhận hai tham số. Tham số đầu tiên là OFFSET và tham số thứ hai là số lượng record nên được trả về từ Database.

Dưới đây là ví dụ đơn giản để lấy record bởi sử dụng mệnh đề LIMIT để thực hiện phân trang.

Ví dụ

Bạn thử ví dụ sau để hiển thị 10 record mỗi trang.

<html>
   
   <head>
      <title>Phân trang trong PHP</title>
   </head>
   
   <body>
      <?php
         $dbhost = 'localhost:3036';
         $dbuser = 'tennguoidung';
         $dbpass = 'matkhau';
         
         $rec_limit = 10;
         $conn = mysql_connect($dbhost, $dbuser, $dbpass);
         
         if(! $conn )
         {
            die('Không thể lấy dữ liệu: ' . mysql_error());
         }
         mysql_select_db('test_db');
         
         /* lấy tổng số bản ghi */
         $sql = "SELECT count(emp_id) FROM employee ";
         $retval = mysql_query( $sql, $conn );
         
         if(! $retval )
         {
            die('Không thể lấy dữ liệu: ' . mysql_error());
         }
         $row = mysql_fetch_array($retval, MYSQL_NUM );
         $rec_count = $row[0];
         
         if( isset($_GET{'page'} ) )
         {
            $page = $_GET{'page'} + 1;
            $offset = $rec_limit * $page ;
         }
         else
         {
            $page = 0;
            $offset = 0;
         }
         $left_rec = $rec_count - ($page * $rec_limit);
         $sql = "SELECT emp_id, emp_name, emp_salary ".
            "FROM employee ".
            "LIMIT $offset, $rec_limit";
            
         $retval = mysql_query( $sql, $conn );
         
         if(! $retval )
         {
            die('Không thể lấy dữ liệu: ' . mysql_error());
         }
         
         while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
         {
            echo "ID :{$row['emp_id']}  <br> ".
               "Tên nhân viên : {$row['emp_name']} <br> ".
               "Lương : {$row['emp_salary']} <br> ".
               "--------------------------------<br>";
         }
         
         if( $page > 0 )
         {
            $last = $page - 2;
            echo "<a href=\"$_PHP_SELF?page=$last\">10 bản ghi trước</a> |";
            echo "<a href=\"$_PHP_SELF?page=$page\">10 bản ghi kế tiếp</a>";
         }
         
         else if( $page == 0 )
         {
            echo "<a href=\"$_PHP_SELF?page=$page\">10 bản ghi kế tiếp</a>";
			}
			
         else if( $left_rec < $rec_limit )
         {
            $last = $page - 2;
            echo "<a href=\"$_PHP_SELF?page=$last\">10 bản ghi trước</a>";
         }
         
         mysql_close($conn);
      ?>
      
   </body>
</html>
Lượt xem: 174