PHP แบ่งหน้า MySQL ด้วยคำสั่ง LIMIT บทความนี้สอนเขียนโปรแกรมแสดงข้อมูลจากฐานข้อมูล MySQL/MariaDB พร้อมแสดงผลบนหน้าเว็บไซต์แบบแบ่งหน้า ด้วยคำสั่ง LIMIT ของ SQL สามารถเขียนโปรแกรมได้ดังนี้
ตัวอย่าง PHP แบ่งหน้า MySQL MariaDB ด้วยคำสั่ง LIMIT
1. สร้างฐานข้อมูลชื่อ example และตารางชื่อ words พร้อมเพิ่มข้อมูลด้วยคำสั่ง SQL
CREATE TABLE `words` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` char(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb4
INSERT INTO
words
VALUES
( NULL, 'A' ),
( NULL, 'B' ),
( NULL, 'C' ),
( NULL, 'D' ),
( NULL, 'E' ),
( NULL, 'F' )
2. เขียนโค้ด PHP แบ่งหน้า MySQL ด้วยคำสั่ง LIMIT
<?php
$pre_page = 3;
isset( $_GET['page'] ) ? $page = $_GET['page'] : $page = 1;
echo "<h4>ข้อมูลหน้าที่ ".$page."</h4>";
$c = mysqli_connect("localhost", "root", "", "example");
mysqli_query( $c, "SET NAMES UTF8" );
$sql = " SELECT * FROM words ";
$q = mysqli_query( $c, $sql );
$num = mysqli_num_rows( $q );
$page_break = ceil($num/$pre_page);
$start_page = ( $page * $pre_page ) - $pre_page;
$sql .= " LIMIT {$start_page}, {$pre_page} ";
$q = mysqli_query( $c, $sql );
while( $f = mysqli_fetch_assoc( $q ) ) {
echo $f['name']."<br/>";
}
if( $page_break > 1 ) {
echo "<div style='margin-top:1rem;'>หน้าที่ ";
for( $i=1; $i<=$page_break; $i++ ) {
echo "<a href='".$_SERVER['PHP_SELF']."?page={$i}'>".$i."</a> ";
}
echo "</div>";
}
mysqli_close( $c );
?>
PHP แบ่งหน้า MySQL MariaDB ด้วยคำสั่ง LIMIT มีรายละเอียดการเขียนโปรแกรมดังนี้
1. ตัวแปร pre_page ใช้สำหรับกำหนดว่าจะให้แสดงข้อมูลต่อหน้ากี่รายการ ตัวอย่างคือ แสดง 3 รายการต่อ 1 หน้า
2. รับค่าตัวแปร page ใช้สำหรับเปลี่ยนหน้า แบ่งหน้ากรณีผู้ใช้งานกดคลิกเปลี่ยนหน้า
3. เชื่อมต่อฐานข้อมูล และ ดึงข้อมูลจากตาราง words พร้อมกับใช้คำสั่ง mysqli_num_rows เพื่อนับจำนวนข้อมูลที่จะแสดงเก็บไว้ที่ตัวแปร num
4. หาจำนวนหน้าที่จะแบ่งด้วย ceil( $num / $pre_page ) คือ ตัวแปร num หารตัวแปร pre_page และปัดเศษขึ้นด้วย ceil
5. สร้างตัวแปรชื่อ page_break เก็บลำดับข้อมูลแรกที่จะแสดงในแต่ละหน้าด้วย ( $page * $pre_page ) - $pre_page เช่น หน้า 1 x 3 - 3 = 0
6. คำสั่ง LIMIT {$start_page}, {$pre_page} เช่น 0, 3 คือ เริ่มแสดงแถวที่ 0 และแสดงไปอีก 3 แถว เป็นส่วนของการแบ่งหน้า
7. คำสั่ง mysqli_query ประมวลผลข้อมูล และคำสั่ง mysqli_fetch_assoc แสดงข้อมูล
8. กรณีตัวแปร page_break มีค่ามากกว่า 1 แปลว่ามีมากกว่า 1 หน้าให้แสดงจุดลิงก์ด้วยคำสั่ง for ร่วมกับ echo
9. ปิดการเชื่อมต่อฐานข้อมูลด้วย mysqli_close