Mệnh đề MySQL LIMIT
Trong hướng dẫn này, bạn sẽ học cách lấy số lượng bản ghi hạn chế từ bảng cơ sở dữ liệu MySQL bằng PHP.
Giới hạn số lượng kết quả
Mệnh đề LIMIT
được sử dụng để hạn chế số lượng hàng được trả về bởi lệnh SELECT
. Tính năng này rất hữu ích để tối ưu hóa thời gian tải trang cũng như nâng cao khả năng đọc của trang web. Ví dụ: bạn có thể chia số lượng lớn bản ghi trong nhiều trang bằng cách sử dụng phân trang, trong đó số lượng bản ghi giới hạn sẽ được tải trên mọi trang từ cơ sở dữ liệu khi người dùng yêu cầu trang đó bằng cách nhấp vào liên kết phân trang.
Cú pháp cơ bản của mệnh đề LIMIT
như sau:
Mệnh đề LIMIT
chấp nhận một hoặc hai thông số này phải là một số nguyên dương:
- Khi hai tham số được chỉ định, tham số đầu tiên chỉ định độ lệch của hàng đầu tiên trả về tức là điểm bắt đầu, trong khi tham số thứ hai chỉ định số lượng hàng sẽ trả về. Phần bù của hàng đầu tiên là 0 (không phải 1).
- Trong khi đó, khi chỉ có một tham số được cung cấp, nó chỉ định số hàng tối đa để trả về từ đầu tập kết quả.
Ví dụ: để truy xuất ba hàng đầu tiên, bạn có thể sử dụng truy vấn sau:
Để truy xuất các hàng 2-4 (bao gồm) của một tập hợp kết quả, bạn có thể sử dụng truy vấn sau:
Hãy tạo một truy vấn SQL bằng cách sử dụng mệnh đề LIMIT
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()
để nhận được số lượng bản ghi giới hạn. Hãy xem xét bảng persons sau bên trong cơ sở dữ liệu demo :
+----+------------+-----------+----------------------+ | id | first_name | last_name | email | +----+------------+-----------+----------------------+ | 1 | Peter | Parker | peterparker@mail.com | | 2 | John | Rambo | johnrambo@mail.com | | 3 | Clark | Kent | clarkkent@mail.com | | 4 | John | Carter | johncarter@mail.com | | 5 | Harry | Potter | harrypotter@mail.com | +----+------------+-----------+----------------------+
Mã PHP trong ví dụ sau sẽ chỉ hiển thị ba hàng từ bảng persons .
Thủ tục
Ví dụ
<?php
/* Attempt MySQL server connection. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
$link = mysqli_connect("localhost", "root", "", "demo");
// Check connection
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
// Attempt select query execution
$sql = "SELECT * FROM persons LIMIT 3";
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>";
// Close result set
mysqli_free_result($result);
} else{
echo "No records matching your query were found.";
}
} else{
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
// Close connection
mysqli_close($link);
?>
Hướng đối tượng
Ví dụ
<?php
/* Attempt MySQL server connection. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
$mysqli = new mysqli("localhost", "root", "", "demo");
// Check connection
if($mysqli === false){
die("ERROR: Could not connect. " . $mysqli->connect_error);
}
// Attempt select query execution
$sql = "SELECT * FROM persons LIMIT 3";
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>";
// Free result set
$result->free();
} else{
echo "No records matching your query were found.";
}
} else{
echo "ERROR: Could not able to execute $sql. " . $mysqli->error;
}
// Close connection
$mysqli->close();
?>
PDO
Ví dụ
<?php
/* Attempt MySQL server connection. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
try{
$pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
// Set the PDO error mode to exception
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
die("ERROR: Could not connect. " . $e->getMessage());
}
// Attempt select query execution
try{
$sql = "SELECT * FROM persons LIMIT 3";
$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>";
// Free result set
unset($result);
} else{
echo "No records matching your query were found.";
}
} catch(PDOException $e){
die("ERROR: Could not able to execute $sql. " . $e->getMessage());
}
// Close connection
unset($pdo);
?>
Sau khi giới hạn kết quả thiết lập, kết quả sẽ giống như sau:
+----+------------+-----------+----------------------+ | id | first_name | last_name | email | +----+------------+-----------+----------------------+ | 1 | Peter | Parker | peterparker@mail.com | | 2 | John | Rambo | johnrambo@mail.com | | 3 | Clark | Kent | clarkkent@mail.com | +----+------------+-----------+----------------------+