メインコンテンツへ移動

เนื้อหาภาษาไทย / タイ語のコンテンツ

システムガイド 内容確認済み

Clause LIMIT คืออะไร?

บทความนี้อธิบายการใช้งาน `LIMIT` Clause ใน SQL เพื่อจำกัดจำนวนแถวที่แสดงผลจากการ Query ซึ่งมีประโยชน์ในการจัดการข้อมูลจำนวนมากและการสร้างระบบ pagination โดย `LI...

Clause LIMIT คืออะไร?

ในบทที่แล้ว เราได้เรียนรู้เกี่ยวกับการเรียงลำดับข้อมูลด้วย ORDER BY Clause ซึ่งช่วยให้เราสามารถจัดเรียงผลลัพธ์ตามความต้องการได้ แต่ในบางครั้ง เราอาจไม่ต้องการแสดงผลลัพธ์ทั้งหมดที่ได้จากการ Query โดยเฉพาะอย่างยิ่งเมื่อตารางมีข้อมูลจำนวนมาก การแสดงผลทั้งหมดอาจทำให้เสียเวลาและทรัพยากรโดยไม่จำเป็น ในบทนี้ เราจะมาเรียนรู้เกี่ยวกับการใช้ LIMIT Clause เพื่อจำกัดจำนวนแถวที่แสดงผล ทำให้เราสามารถจัดการกับข้อมูลจำนวนมากได้อย่างมีประสิทธิภาพมากขึ้น

LIMIT number

รูปแบบการใช้งานพื้นฐานของ LIMIT คือการกำหนดจำนวนแถวสูงสุดที่ต้องการแสดงผล ตัวอย่างเช่น หากเราต้องการแสดงข้อมูล 5 แถวแรกจากตาราง customers เราสามารถใช้คำสั่ง SQL ดังนี้:

SELECT * FROM customers LIMIT 5;

คำสั่งนี้จะเลือกข้อมูลทั้งหมดจากตาราง customers แต่จะแสดงผลเพียง 5 แถวแรกเท่านั้น โดย MySQL จะเลือกแถวตามลำดับที่ถูกเก็บไว้ในตาราง (ซึ่งอาจไม่ใช่ลำดับที่เราต้องการ หากต้องการลำดับที่แน่นอน ควรใช้ร่วมกับ ORDER BY Clause)

ตัวอย่างการใช้งานจริง: สมมติว่าเรามีเว็บไซต์อีคอมเมิร์ซ และต้องการแสดงสินค้าใหม่ล่าสุด 3 รายการบนหน้าแรก เราสามารถใช้ LIMIT ร่วมกับ ORDER BY เพื่อให้ได้ผลลัพธ์ที่ต้องการ:

SELECT * FROM products ORDER BY created_at DESC LIMIT 3;

คำสั่งนี้จะเรียงลำดับสินค้าตามวันที่สร้าง (created_at) จากใหม่ไปเก่า (DESC) และแสดงผลเพียง 3 รายการแรก ซึ่งก็คือสินค้าใหม่ล่าสุด 3 รายการนั่นเอง

LIMIT offset, number

นอกจากรูปแบบพื้นฐานแล้ว LIMIT ยังสามารถใช้ร่วมกับ offset เพื่อกำหนดจุดเริ่มต้นในการแสดงผลได้ รูปแบบการใช้งานคือ LIMIT offset, number โดยที่:

  • offset คือจำนวนแถวที่ต้องการข้ามไปก่อนที่จะเริ่มแสดงผล
  • number คือจำนวนแถวที่ต้องการแสดงผล

ตัวอย่างเช่น หากเราต้องการแสดงข้อมูลแถวที่ 6 ถึง 10 จากตาราง customers เราสามารถใช้คำสั่ง SQL ดังนี้:

SELECT * FROM customers LIMIT 5, 5;

คำสั่งนี้จะข้าม 5 แถวแรก (offset = 5) และแสดงผลอีก 5 แถว (number = 5) ซึ่งก็คือแถวที่ 6 ถึง 10 นั่นเอง (โปรดจำไว้ว่า offset เริ่มต้นที่ 0)

ข้อผิดพลาดที่พบบ่อย: ผู้เริ่มต้นมักจะสับสนระหว่าง offset และ number โปรดจำไว้ว่า offset คือจุดเริ่มต้น และ number คือจำนวนแถวที่ต้องการแสดงผล

ตัวอย่างการใช้งานจริง: สมมติว่าเรามีระบบ pagination ในเว็บไซต์ และผู้ใช้กำลังดูหน้าที่ 3 โดยแต่ละหน้าแสดงผล 10 รายการ เราสามารถใช้ LIMIT ร่วมกับ offset เพื่อดึงข้อมูลที่ถูกต้องมาแสดงผล:

SELECT * FROM products LIMIT 20, 10;

เนื่องจากแต่ละหน้าแสดงผล 10 รายการ และผู้ใช้กำลังดูหน้าที่ 3 ดังนั้นเราจึงต้องข้าม 20 รายการแรก (2 หน้า * 10 รายการต่อหน้า) และแสดงผลอีก 10 รายการ

Pagination

LIMIT Clause มีประโยชน์อย่างมากในการสร้างระบบ pagination ซึ่งเป็นวิธีการแบ่งข้อมูลจำนวนมากออกเป็นหน้าๆ เพื่อให้ผู้ใช้สามารถเรียกดูข้อมูลได้อย่างสะดวกและรวดเร็ว โดยไม่ต้องรอให้ข้อมูลทั้งหมดถูกโหลดพร้อมกัน

ขั้นตอนการสร้างระบบ Pagination แบบง่าย:

  1. คำนวณจำนวนหน้าทั้งหมด: ก่อนอื่นเราต้องรู้ว่าข้อมูลทั้งหมดมีกี่รายการ และแต่ละหน้าจะแสดงผลกี่รายการ จากนั้นเราสามารถคำนวณจำนวนหน้าทั้งหมดได้โดยใช้สูตร: จำนวนหน้า = จำนวนข้อมูลทั้งหมด / จำนวนรายการต่อหน้า (ปัดเศษขึ้นหากมีเศษ)
  2. ดึงข้อมูลสำหรับหน้าปัจจุบัน: เมื่อผู้ใช้เลือกหน้าใดหน้าหนึ่ง เราจะใช้ LIMIT ร่วมกับ offset เพื่อดึงข้อมูลที่ถูกต้องมาแสดงผล โดย offset จะคำนวณจาก (หมายเลขหน้า - 1) * จำนวนรายการต่อหน้า
  3. แสดงผลข้อมูลและปุ่มนำทาง: สุดท้ายเราจะแสดงผลข้อมูลที่ได้จากการ Query และสร้างปุ่มนำทาง (เช่น ปุ่ม "หน้าก่อนหน้า", ปุ่ม "หน้าถัดไป", และปุ่มสำหรับแต่ละหน้า) เพื่อให้ผู้ใช้สามารถไปยังหน้าต่างๆ ได้

ตัวอย่างการใช้งาน: สมมติว่าเรามีตาราง articles ที่มีข้อมูลบทความจำนวนมาก และเราต้องการสร้างระบบ pagination โดยให้แต่ละหน้าแสดงผล 5 บทความ

<?php
// กำหนดจำนวนรายการต่อหน้า
$itemsPerPage = 5;

// ดึงหมายเลขหน้าจาก query string (ถ้าไม่มีให้ใช้หน้า 1)
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;

// คำนวณ offset
$offset = ($page - 1) * $itemsPerPage;

// เชื่อมต่อกับฐานข้อมูล MySQL (แทนที่ด้วยข้อมูลการเชื่อมต่อของคุณ)
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database_name";

$conn = new mysqli($servername, $username, $password, $dbname);

// ตรวจสอบการเชื่อมต่อ
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

// Query ข้อมูลบทความ
$sql = "SELECT * FROM articles LIMIT $offset, $itemsPerPage";
$result = $conn->query($sql);

// ตรวจสอบว่ามีข้อมูลหรือไม่
if ($result->num_rows > 0) {
  // แสดงผลข้อมูลบทความ
  while($row = $result->fetch_assoc()) {
    echo "<h3>" . $row["title"] . "</h3>";
    echo "<p>" . $row["content"] . "</p>";
  }
} else {
  echo "No articles found.";
}

// คำนวณจำนวนหน้าทั้งหมด
$sqlCount = "SELECT COUNT(*) AS total FROM articles";
$resultCount = $conn->query($sqlCount);
$rowCount = $resultCount->fetch_assoc();
$totalItems = $rowCount["total"];
$totalPages = ceil($totalItems / $itemsPerPage);

// สร้างปุ่มนำทาง
echo "<div class='pagination'>";
for ($i = 1; $i <= $totalPages; $i++) {
  echo "<a href='?page=" . $i . "'>" . $i . "</a>";
}
echo "</div>";

$conn->close();
?>

โค้ดตัวอย่างนี้เป็น PHP ที่ดึงข้อมูลบทความจากฐานข้อมูล MySQL โดยใช้ LIMIT และ offset เพื่อแสดงผลบทความสำหรับหน้าปัจจุบัน นอกจากนี้ยังมีการคำนวณจำนวนหน้าทั้งหมดและสร้างปุ่มนำทางเพื่อให้ผู้ใช้สามารถไปยังหน้าต่างๆ ได้

ข้อควรระวัง: ในการใช้งานจริง ควรมีการ sanitize และ validate ค่า page ที่รับมาจาก query string เพื่อป้องกันการโจมตีแบบ SQL Injection และ XSS

สรุป

LIMIT Clause เป็นเครื่องมือที่มีประโยชน์อย่างมากในการจัดการกับข้อมูลจำนวนมากใน MySQL ช่วยให้เราสามารถจำกัดจำนวนแถวที่แสดงผลและสร้างระบบ pagination ได้อย่างง่ายดาย การเข้าใจวิธีการใช้งาน LIMIT อย่างถูกต้องจะช่วยให้เราสามารถพัฒนาแอปพลิเคชันที่ทำงานได้อย่างมีประสิทธิภาพและเป็นมิตรต่อผู้ใช้

ในบทต่อไป เราจะมาเรียนรู้เกี่ยวกับ LIKE Clause ซึ่งเป็นเครื่องมือที่ใช้ในการค้นหาข้อมูลที่มีรูปแบบเฉพาะเจาะจง

Office.in.th Custom Service

この構成をもとにシステムを開発・カスタマイズしたいですか?

Office.in.th は、エンタープライズ Web アプリケーション、API 連携、官民の業務管理システムの設計・開発を承り、長期的なサポートも提供します。

ソフトウェア開発サービスを見る