Devdit
 

PHP แบ่งหน้า MySQL MariaDB ด้วยคำสั่ง LIMIT

1.6K

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

แก้ไข 2 ปีที่แล้ว
ชอบ
ลิ้งก์
แชร์
Devdit มีช่อง YouTube แล้ว
เราสร้างวิดีโอเกี่ยวกับเทคโนโลยี ทำตามง่ายๆ