Như @James nói, nó sẽ đặt hàng tất cả các bản ghi, sau đó nhận 20 hàng đầu tiên.
Vì nó là như vậy, bạn được đảm bảo để có được 20 bài báo được xuất bản đầu tiên, những bài mới hơn sẽ không được hiển thị.
Trong tình huống của bạn, tôi khuyên bạn nên thêm desc
vào order by publish_date
, nếu bạn muốn các bài viết mới nhất, thì bài viết mới nhất sẽ là đầu tiên.
Nếu bạn cần giữ kết quả theo thứ tự tăng dần, và vẫn chỉ muốn 10 bài viết mới nhất, bạn có thể yêu cầu mysql sắp xếp kết quả của bạn hai lần.
Truy vấn dưới đây sẽ sắp xếp kết quả giảm dần và giới hạn kết quả là 10 (đó là truy vấn bên trong dấu ngoặc đơn). Nó vẫn sẽ được sắp xếp theo thứ tự giảm dần và chúng tôi không hài lòng với điều đó, vì vậy chúng tôi yêu cầu mysql sắp xếp lại một lần nữa. Bây giờ chúng tôi có kết quả mới nhất trên hàng cuối cùng.
select t.article
from
(select article, publish_date
from table1
order by publish_date desc limit 10) t
order by t.publish_date asc;
Nếu bạn cần tất cả các cột, nó được thực hiện theo cách này:
select t.*
from
(select *
from table1
order by publish_date desc limit 10) t
order by t.publish_date asc;
Tôi sử dụng kỹ thuật này khi tôi tự viết các truy vấn để kiểm tra cơ sở dữ liệu cho nhiều thứ khác nhau. Tôi đã không sử dụng nó trong môi trường sản xuất, nhưng bây giờ khi tôi đánh dấu nó, việc sắp xếp thêm không ảnh hưởng đến hiệu suất.
publish_date
s bằng nhau, việc đặt hàng của chúng không cho kết quả xác định, nghĩa là nếu bạn sử dụngLIMIT
để phân trang, cuối cùng bạn có thể nhận được cùng một mục trên các trang khác nhau!