Trong bài Hướng dẫn sử dụng MySQL trong PHP này, bạn sẽ tìm hiểu làm thế nào để sắp xếp và hiển thị các dữ liệu từ bảng MySQL theo thứ tự tăng dần và giảm dần.
1. Sắp xếp thứ tự của kết quả truy vấn với ORDER BY
Mệnh đề ORDER BY được sử dụng kết hợp với câu lệnh SELECT để xem dữ liệu từ một bảng được sắp xếp theo một trường cụ thể.
Mệnh đề ORDER BY cho phép bạn xác định tên trường để sắp xếp theo và hướng sắp xếp tăng dần hoặc giảm dần.
Cú pháp cơ bản của mệnh đề ORDER BY như sau:
SELECT column_name(s) FROM table_name ORDER BY column_name(s) ASC|DESC
Trong đó, theo mặc định kết quả của truy vấn sử dụng ORDER BY sẽ sắp xếp theo thứ tự tăng dần (ASC).
Nếu bạn muốn sắp xếp theo thứ tự giảm dần, hãy thêm tùy chọn DESC vào câu truy vấn.
Ví dụ sử dụng ORDER BY
Trong ví dụ này, chúng ta hãy tạo một truy vấn SQL bằng cách sử dụng mệnh đề ORDER BY trong câu lệnh SELECT.
Sau đó chúng ta sẽ thực hiện truy vấn này thông qua việc chuyển nó đến hàm mysqli_query() của PHP để lấy dữ liệu theo thứ tự.
Hãy xem xét bảng person sau trong cơ sở dữ liệu demo:
2.1. Sử dụng ORDER BY theo phương pháp MySQLi hướng thủ tục
<?php
/* Cố gắng kết nối với MySQL Server. Giả sử bạn đang chạy MySQL Server với tài khoản mặc định (user là root và không có mật khẩu) */
$link = mysqli_connect("localhost", "root", "", "demo");
// Kiểm tra kết nối
if($link === false){
die("ERROR: Không thể kết nối. " . mysqli_connect_error());
}
// Cố gắng thực thi truy vấn với mệnh đề ORDER BY
// Mặc định sắp xếp theo thứ tự tăng dần
$sql = "SELECT * FROM persons ORDER BY first_name";
if($result = mysqli_query($link, $sql)){
if(mysqli_num_rows($result) > 0){
echo "<table>";
echo "<tr>";
echo "<th>id</th>";
echo "<th>first_name</th>";
echo "<th>last_name</th>";
echo "<th>email</th>";
echo "</tr>";
while($row = mysqli_fetch_array($result)){
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['first_name'] . "</td>";
echo "<td>" . $row['last_name'] . "</td>";
echo "<td>" . $row['email'] . "</td>";
echo "</tr>";
}
echo "</table>";
// Giải phóng bộ nhớ của biến
mysqli_free_result($result);
} else{
echo "Không có bản ghi nào được tìm thấy.";
}
} else{
echo "ERROR: Không thể thực thi $sql. " . mysqli_error($link);
}
// Đóng kết nối
mysqli_close($link);
?>
2.2. Sử dụng ORDER BY theo phương pháp MySQLi hướng đối tượng
<?php
/* Cố gắng kết nối với MySQL Server. Giả sử bạn đang chạy MySQL Server với tài khoản mặc định (user là root và không có mật khẩu) */
$mysqli = new mysqli("localhost", "root", "", "demo");
// Kiểm tra kết nối
if($mysqli === false){
die("ERROR: Không thể kết nối. " . $mysqli->connect_error);
}
// Cố gắng thực thi truy vấn với mệnh đề ORDER BY
// Mặc định sắp xếp theo thứ tự tăng dần
$sql = "SELECT * FROM persons ORDER BY firts_name";
if($result = $mysqli->query($sql)){
if($result->num_rows > 0){
echo "<table>";
echo "<tr>";
echo "<th>id</th>";
echo "<th>first_name</th>";
echo "<th>last_name</th>";
echo "<th>email</th>";
echo "</tr>";
while($row = $result->fetch_array()){
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['first_name'] . "</td>";
echo "<td>" . $row['last_name'] . "</td>";
echo "<td>" . $row['email'] . "</td>";
echo "</tr>";
}
echo "</table>";
// Giải phóng bộ nhớ của biến
$result->free();
} else{
echo "Không có bản ghi nào được tìm thấy.";
}
} else{
echo "ERROR: Không thể thực thi $sql. " . $mysqli->error;
}
// Đóng kết nối
$mysqli->close();
?>
2.3. Sử dụng ORDER BY với PDO
<?php
/* Cố gắng kết nối với MySQL Server. Giả sử bạn đang chạy MySQL Server với tài khoản mặc định (user là root và không có mật khẩu) */
try{
$pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
// Thiết lập PDO error thành ngoại lệ
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
die("ERROR: Không thể kết nối. " . $e->getMessage());
}
// Cố gắng thực thi truy vấn
try{
$sql = "SELECT * FROM persons ORDER BY first_name";
$result = $pdo->query($sql);
if($result->rowCount() > 0){
echo "<table>";
echo "<tr>";
echo "<th>id</th>";
echo "<th>first_name</th>";
echo "<th>last_name</th>";
echo "<th>email</th>";
echo "</tr>";
while($row = $result->fetch()){
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['first_name'] . "</td>";
echo "<td>" . $row['last_name'] . "</td>";
echo "<td>" . $row['email'] . "</td>";
echo "</tr>";
}
echo "</table>";
// Giải phóng bộ nhớ biến
unset($result);
} else{
echo "Không có bản ghi nào được tìm thấy.";
}
} catch(PDOException $e){
die("ERROR: Không thể thực thi $sql. " . $e->getMessage());
}
// Close connection
unset($pdo);
?>
Sau khi thực hiện, chúng ta sẽ có được kết quả như sau:
Bạn đã hiểu cách sử dụng mệnh đề ORDER BY chưa?
Như vậy là bài này mình đã hướng dẫn bạn sử dụng mệnh đề ORDER BY để sắp xếp dữ liệu lấy ra từ bảng MySQL theo chiều tăng dần (ASC) hoặc giảm dần (DESC).
Câu lệnh SQL sử dụng ORDER BY cũng đơn giản phải không nào? 😀
- Tham khảo Khóa học Lập trình PHP Fullstack nếu bạn muốn học bài bản hơn.
Hãy cố gắng làm lại và ghi nhớ nhé. Chúc bạn học tốt!