Phân trangtrong PHP
Ở bài viết này chỉ dừng lại ở mức phân tích cách phântrang , còn code cụ thể thì mỗi
người có một cách viết riêng. Giả có table 1000 dòng và sau khi truy vấn mysql select
theo một điều kiện cụ thể (1) $sql = select * from where
thì bạn thu được kết quả là 101 dòng và rõ rảng kô thể cho hiển thị tất cả 101 dòng ra
web nên bạn phải fân nó ra thành nhiều trang để tăng tốc độ load.
Trong ví dụ này tôi sẽ fân mỗi trang 10 dòng , như vậy table sẽ gồm có 11 trangtrong đó có:
- 10 trang mỗi trang 10 dòng
- 1 trang , trang này chỉ có 1 dòng
và được đánh số từ 0,1 10
Cách thực hiện:
+ tính tổng số dòng của câu select với điều kiện cụ thể như (1) có thể dùng mysql_num_rows để
tính số dòng của (1)
> thí dụ này là 101 dòng ( gọi là $total)
+ Tính số trang để biểu diễn số dòng vừa tìm được
số trang = tổng số dòng/ số dòng trên mỗi trang
$nPage = floor($total/10+0.5); //10 là số dòng trên mỗi trang
>Kết quả:
dòng 0 9 : trang 1
dòng 10 19 : trang 2
dòng 90 99 trang 10
dòng 100 : trang 11
$p là thư tự trang -> $p = 0,1,2, ,10
Bây giờ khi gọi trang index.php?p=0 thi nhiệm vụ là chỉ lấy kết quả trong table thỏa <điều kiện>
và chỉ lấy từ dòng 0 đến dòng 9
khi đó câu truy vấn sẽ là: $sql = "select * from where <điều kiện> limit 0,10";
Tương tự cho trang $p=1 (lấy từ dòng 10 đến dòng 20) là $sql = "select * from
where <điều kiện> limit 1*10,10";
Tổng quát : $sql = "select * from
where <điều kiện> limit $p,10";
Thuật tóan có thể viết ngắn gọn như sau :
$nLine = 10; // là số dòng trên một trang
$p = 0; // mặc định lấy 10 kết quả đầu tiên
if(isset($_GET['p'])) $p = $_GET['p'];
$start = $p*$nLine;
$total = mysql_num_rows(mysql_query("select * from
where "));
$nPage = floor($total/$nLine)+1;
= 'Page: ';
foreach($i=0;$i<$nPage;$i++) .= '. $i . '">' .( $i + 1 ). ' ';
/*
$result = mysql_query("select * from
where limit $start,$nLine");
Hiển thị nội dung cần trình bày
*/
?>
Sau đó in giá trị của ra ta được
Page : 1 2 3 4 5 6 7 8 9 10 11 ( với đường link tương ứng là
index.php?p=0
index.php?p=1
index.php?p=10
Khi gọi index.php?p=2;
thì $start = 2*10 = 20;
nên câu truy vấn $result sẽ là "select * from
where limit 20,10"
nghĩa là lấy 10 mẫu tin tính từ mẫu tin thứ 20 => lấy từ rows 20-30, tương tự cho các trang khác
Thuật tóan trên là cách viết của TG, bạn có thể viết theo ý mình , chủ yếu là bạn hiểu cách phân
trang, còn việc viết thế nào chỉ là vấn đề kỹ năng .
Tác giả: TG
. Phân trang trong PHP
Ở bài viết này chỉ dừng lại ở mức phân tích cách phân trang , còn code cụ thể thì mỗi
người. thành nhiều trang để tăng tốc độ load.
Trong ví dụ này tôi sẽ fân mỗi trang 10 dòng , như vậy table sẽ gồm có 11 trang trong đó có:
- 10 trang mỗi trang 10