Mệnh đề LIMIT trong MySQL
Trần Thị Vân
- 1090
- 14/08/2025
Chức năng của Mệnh đề LIMIT trong MySQL
Mệnh đề LIMIT trong MySQL dùng để lấy số hàng trong bảng có giới hạn về số lượng, ngoài ra còn có thể chọn vị trí bắt đầu để lấy.
Code Mệnh đề LIMIT trong MySQL
select ten,id,gia,id_cha1 from tb_sanpham where hienthi=1 order by id desc limit 0,3;
select ten,id,gia,id_cha1 from tb_sanpham where hienthi=1 order by id desc limit 1,3;
<?php
$dbhost = 'localhost';
$dbuser = 'webmoi_userdata'; // Tên username
$dbpass = 'xgZwEfQWE'; // Mật khẩu
// Kết nối đến tên username
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ){
die('Không kết nối được: ' . mysql_error());
}
// Chọn tên database
mysql_select_db('webmoi_tendata');
// Xét kiểu tiếng việt
mysql_query('SET NAMES "utf8"');
// limit 0,3
echo "<b>limit 0,3</b><br>";
$sql ="select ten,id,gia,id_cha1 from tb_sanpham where hienthi=1 order by id desc limit 0,3";
$ketquamot = mysql_query($sql,$conn);
if(!$ketquamot){
die('Không thể lấy dữ liệu: ' . mysql_error());
}
// Dùng vòng lặp để lấy ra từng hàng trong bảng
while($row = mysql_fetch_array($ketquamot, MYSQL_ASSOC)){
echo "ID: {$row['id']} <br> ".
"Tên sản phẩm: {$row['ten']} <br> ".
"Giá : {$row['gia']} <br> ".
"--------------------------------<br>";
}
// limit 1,3
echo "<b>limit 1,3</b><br>";
$sql ="select ten,id,gia,id_cha1 from tb_sanpham where hienthi=1 order by id desc limit 1,3";
$ketquahai = mysql_query($sql,$conn);
if(!$ketquahai){
die('Không thể lấy dữ liệu: ' . mysql_error());
}
// Dùng vòng lặp để lấy ra từng hàng trong bảng
while($row = mysql_fetch_array($ketquahai, MYSQL_ASSOC)){
echo "ID: {$row['id']} <br> ".
"Tên sản phẩm: {$row['ten']} <br> ".
"Giá : {$row['gia']} <br> ".
"--------------------------------<br>";
}
// Đóng kết nối database
mysql_close($conn);
?>
Kết quả:
limit 0,3
ID: 7
Tên sản phẩm: Micro AKG D7 S
Giá : 3400000
--------------------------------
ID: 6
Tên sản phẩm: Micro Shure SM58-LC
Giá : 2700000
--------------------------------
ID: 4
Tên sản phẩm: Dàn âm thanh nghe nhạc AV02
Giá : 30000000
--------------------------------
limit 1,3
ID: 6
Tên sản phẩm: Micro Shure SM58-LC
Giá : 2700000
--------------------------------
ID: 4
Tên sản phẩm: Dàn âm thanh nghe nhạc AV02
Giá : 30000000
--------------------------------
ID: 3
Tên sản phẩm: Dàn âm thanh nghe nhạc AV01
Giá : 25000000
--------------------------------
Ứng dụng LIMIT trong truy vấn MySQL thực tế
Trong các website sử dụng MySQL, LIMIT thường được dùng để kiểm soát số lượng bản ghi trả về thay vì lấy toàn bộ dữ liệu cùng lúc. Điều này đặc biệt hữu ích khi xây dựng danh sách bài viết, sản phẩm, tài khoản hoặc các màn hình quản trị có nhiều dữ liệu.
Phân trang dữ liệu với LIMIT và OFFSET
Khi một bảng có hàng nghìn bản ghi, việc hiển thị tất cả trong một lần truy vấn sẽ khiến kết quả dài và có thể làm tăng thời gian xử lý. Kết hợp LIMIT với OFFSET giúp chia dữ liệu thành từng trang.
Ví dụ, lấy 10 bản ghi bắt đầu từ vị trí thứ 20:
SELECT * FROM posts
LIMIT 10 OFFSET 20;
Cách viết tương đương thường gặp trong MySQL là:
SELECT * FROM posts
LIMIT 20, 10;
Trong đó, 20 là số bản ghi bỏ qua và 10 là số bản ghi tối đa được lấy. Khi xây dựng phân trang, nên kết hợp thêm ORDER BY để thứ tự dữ liệu ổn định giữa các lần truy vấn.
Lấy bản ghi mới nhất hoặc cũ nhất với LIMIT
LIMIT rất phù hợp khi chỉ cần một vài bản ghi đứng đầu theo một tiêu chí nhất định. Chẳng hạn, để lấy bài viết mới nhất, có thể sắp xếp thời gian giảm dần rồi giới hạn kết quả:
SELECT * FROM posts
ORDER BY created_at DESC
LIMIT 1;
Ngược lại, nếu muốn lấy bài viết cũ nhất, thay DESC bằng ASC:
SELECT * FROM posts
ORDER BY created_at ASC
LIMIT 1;
Cách kết hợp này hữu ích trong nhiều tình huống như lấy sản phẩm mới cập nhật, đơn hàng gần nhất hoặc tìm một bản ghi đại diện theo thời gian.
Kết hợp LIMIT với WHERE, ORDER BY và điều kiện lọc
LIMIT không nhất thiết phải sử dụng độc lập. Khi kết hợp với WHERE và ORDER BY, truy vấn có thể lọc đúng nhóm dữ liệu rồi mới giới hạn số kết quả cần lấy.
Ví dụ, lấy 5 bài viết đã được xuất bản mới nhất:
SELECT * FROM posts
WHERE status = 'published'
ORDER BY created_at DESC
LIMIT 5;
Thứ tự xử lý về mặt ý nghĩa là lọc các bài viết phù hợp, sắp xếp theo thời gian rồi lấy tối đa 5 bản ghi. Đây là cách sử dụng thực tế và thường gặp hơn so với việc chỉ đặt LIMIT vào một truy vấn đơn giản.
Những lưu ý khi sử dụng LIMIT trên bảng dữ liệu lớn
Với bảng nhỏ, LIMIT thường không tạo ra vấn đề đáng kể. Tuy nhiên, khi dữ liệu tăng lên hàng trăm nghìn hoặc hàng triệu bản ghi, việc sử dụng OFFSET quá lớn có thể khiến MySQL phải bỏ qua một lượng lớn dòng trước khi trả về kết quả.
Ngoài ra, nên có cột phù hợp để ORDER BY và xây dựng chỉ mục khi cần thiết. Nếu truy vấn vừa lọc, vừa sắp xếp và phân trang trên dữ liệu lớn, việc thiết kế chỉ mục đúng cách có thể ảnh hưởng đáng kể đến tốc độ phản hồi.
Với những trang có lượng dữ liệu rất lớn, có thể cân nhắc cách phân trang dựa trên giá trị của bản ghi cuối cùng thay vì liên tục tăng OFFSET. Cách này thường phù hợp hơn cho các danh sách cần tải nhiều trang dữ liệu.
Lời kết
Cảm ơn các bạn đã tham khảo bài viết Mệnh đề LIMIT trong MySQL.
Tải file database .sql về nếu muốn kiểm tra hoặc thực hành Tải về.
- 0 Bình luận
Email, Điện thoại của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *