การ Query ข้อมูลจากฐานข้อมูล
หลังจากที่เราได้ทำการเชื่อมต่อกับฐานข้อมูล MySQL เรียบร้อยแล้ว ในบทนี้เราจะมาเรียนรู้วิธีการ Query หรือดึงข้อมูลจากฐานข้อมูลโดยใช้ PHP ซึ่งเป็นหัวใจสำคัญของการสร้าง API ที่สามารถจัดการข้อมูลได้อย่างมีประสิทธิภาพ
SELECT Statement
คำสั่ง SELECT เป็นคำสั่ง SQL พื้นฐานที่สุดที่ใช้ในการดึงข้อมูลจากฐานข้อมูล เราจะเริ่มจากตัวอย่างง่ายๆ และค่อยๆ เพิ่มความซับซ้อนขึ้นเรื่อยๆ
สมมติว่าเรามีตารางชื่อ users ในฐานข้อมูลของเรา ซึ่งมีโครงสร้างดังนี้:
id: INT (Primary Key, Auto Increment)firstname: VARCHAR(255)lastname: VARCHAR(255)email: VARCHAR(255)
หากเราต้องการดึงข้อมูลทั้งหมดจากตาราง users เราสามารถใช้คำสั่ง SQL ดังนี้:
SELECT * FROM users;
ใน PHP เราสามารถใช้คำสั่งนี้ได้ดังนี้:
<?php
// ข้อมูลการเชื่อมต่อฐานข้อมูล (แก้ไขให้ถูกต้อง)
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database_name";
// สร้าง connection
$conn = new mysqli($servername, $username, $password, $dbname);
// ตรวจสอบ connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// คำสั่ง SQL
$sql = "SELECT * FROM users";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// วนลูปเพื่อแสดงข้อมูลแต่ละแถว
while($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. " - Email: " . $row["email"]. "<br>";
}
} else {
echo "0 results";
}
$conn->close();
?>
คำอธิบาย:
- เราทำการสร้าง connection กับฐานข้อมูลเหมือนในบทก่อนหน้า
$sql = "SELECT * FROM users";: กำหนดคำสั่ง SQL ที่เราต้องการ execute$result = $conn->query($sql);: ส่งคำสั่ง SQL ไปยังฐานข้อมูลและเก็บผลลัพธ์ไว้ในตัวแปร$result$result->num_rows > 0: ตรวจสอบว่ามีข้อมูลที่ถูกดึงกลับมาหรือไม่$row = $result->fetch_assoc();: ดึงข้อมูลแต่ละแถวในรูปแบบ associative array (เข้าถึงข้อมูลด้วยชื่อ column)echo ...: แสดงข้อมูลที่ดึงมา$conn->close();: ปิด connection เมื่อใช้งานเสร็จ
ถ้าเราต้องการดึงข้อมูลเฉพาะบาง column เท่านั้น เช่น firstname และ email เราสามารถแก้ไขคำสั่ง SQL ได้ดังนี้:
SELECT firstname, email FROM users;
และใน PHP:
<?php
// (ส่วนของการเชื่อมต่อฐานข้อมูลเหมือนเดิม)
$sql = "SELECT firstname, email FROM users";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "Name: " . $row["firstname"]. " - Email: " . $row["email"]. "<br>";
}
} else {
echo "0 results";
}
$conn->close();
?>
WHERE Clause
WHERE clause ใช้ในการกำหนดเงื่อนไขในการดึงข้อมูล เช่น เราต้องการดึงข้อมูลของผู้ใช้ที่มี firstname เท่ากับ "John" เท่านั้น
SELECT * FROM users WHERE firstname = 'John';
ใน PHP:
<?php
// (ส่วนของการเชื่อมต่อฐานข้อมูลเหมือนเดิม)
$sql = "SELECT * FROM users WHERE firstname = 'John'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. " - Email: " . $row["email"]. "<br>";
}
} else {
echo "0 results";
}
$conn->close();
?>
เราสามารถใช้ operators ต่างๆ ใน WHERE clause ได้ เช่น:
=(เท่ากับ)!=หรือ<>(ไม่เท่ากับ)>(มากกว่า)<(น้อยกว่า)>=(มากกว่าหรือเท่ากับ)<=(น้อยกว่าหรือเท่ากับ)LIKE(ใช้สำหรับการ matching รูปแบบ)IN(ตรวจสอบว่าค่าอยู่ในชุดของค่าที่กำหนดหรือไม่)BETWEEN(ตรวจสอบว่าค่าอยู่ระหว่างช่วงที่กำหนดหรือไม่)
ตัวอย่างการใช้ LIKE เพื่อค้นหาผู้ใช้ที่มี firstname ขึ้นต้นด้วย "J":
SELECT * FROM users WHERE firstname LIKE 'J%';
ใน PHP:
<?php
// (ส่วนของการเชื่อมต่อฐานข้อมูลเหมือนเดิม)
$sql = "SELECT * FROM users WHERE firstname LIKE 'J%'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. " - Email: " . $row["email"]. "<br>";
}
} else {
echo "0 results";
}
$conn->close();
?>
เรายังสามารถใช้ AND และ OR เพื่อรวมเงื่อนไขหลายๆ เงื่อนไขเข้าด้วยกันได้
ตัวอย่าง: ดึงข้อมูลของผู้ใช้ที่มี firstname เท่ากับ "John" และ lastname เท่ากับ "Doe":
SELECT * FROM users WHERE firstname = 'John' AND lastname = 'Doe';
ORDER BY Clause
ORDER BY clause ใช้ในการเรียงลำดับข้อมูลที่ถูกดึงกลับมา เราสามารถเรียงลำดับตาม column ใดก็ได้ ไม่ว่าจะเรียงจากน้อยไปมาก (ASC - Ascending) หรือจากมากไปน้อย (DESC - Descending)
ตัวอย่าง: เรียงลำดับผู้ใช้ตาม firstname จากน้อยไปมาก:
SELECT * FROM users ORDER BY firstname ASC;
ใน PHP:
<?php
// (ส่วนของการเชื่อมต่อฐานข้อมูลเหมือนเดิม)
$sql = "SELECT * FROM users ORDER BY firstname ASC";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. " - Email: " . $row["email"]. "<br>";
}
} else {
echo "0 results";
}
$conn->close();
?>
ถ้าเราต้องการเรียงลำดับจากมากไปน้อย เราสามารถใช้ DESC:
SELECT * FROM users ORDER BY firstname DESC;
เราสามารถเรียงลำดับตามหลาย column ได้ โดยจะเรียงลำดับตาม column แรกก่อน แล้วจึงเรียงลำดับตาม column ถัดไปในกรณีที่ column แรกมีค่าเท่ากัน
ตัวอย่าง: เรียงลำดับตาม firstname จากน้อยไปมาก และถ้า firstname เท่ากัน ให้เรียงตาม lastname จากน้อยไปมาก:
SELECT * FROM users ORDER BY firstname ASC, lastname ASC;
ในบทนี้ เราได้เรียนรู้วิธีการ Query ข้อมูลจากฐานข้อมูล MySQL โดยใช้ PHP ซึ่งครอบคลุมถึงการใช้ SELECT statement, WHERE clause และ ORDER BY clause ในบทถัดไป เราจะมาเรียนรู้วิธีการเพิ่มข้อมูลลงในฐานข้อมูล