Chọn N hàng cuối cùng từ MySQL


121

Tôi muốn chọn 50 hàng cuối cùng từ cơ sở dữ liệu MySQL trong cột có tên idkhóa chính . Mục tiêu là các hàng phải được sắp xếp theo id theo thứ tự ASC , đó là lý do tại sao truy vấn này không hoạt động

SELECT 
    *
FROM
    `table`
ORDER BY id DESC
LIMIT 50;

Ngoài ra, điều đáng chú ý là các hàng có thể bị thao túng (bị xóa) và đó là lý do tại sao truy vấn sau cũng không hoạt động

SELECT 
    *
FROM
    `table`
WHERE
    id > ((SELECT 
            MAX(id)
        FROM
            chat) - 50)
ORDER BY id ASC;

Câu hỏi : Làm cách nào để truy xuất N hàng cuối cùng từ cơ sở dữ liệu MySQL có thể được thao tác và theo thứ tự ASC?

Câu trả lời:


236

Bạn có thể làm điều đó với một truy vấn phụ:

SELECT * FROM (
    SELECT * FROM table ORDER BY id DESC LIMIT 50
) sub
ORDER BY id ASC

Thao tác này sẽ chọn 50 hàng cuối cùngtable , sau đó sắp xếp chúng theo thứ tự tăng dần.


5
^ FYI, tôi biết bài viết này nói về MySQL, nhưng muốn khuyên rằng theo nhận xét của @ DiegoDD ở trên, việc bỏ qua lựa chọn bên ngoài và bí danh dường như không hoạt động trong Postgres (9.3.5). Tôi nhận được "Lỗi: nhiều mệnh đề ORDER BY không được phép". Câu trả lời được chấp nhận, tuy nhiên, không làm việc như mong đợi trong Postgres
allenwlee

Cảm ơn vì điều đó! Truy vấn này đã giúp tôi khắc phục sự cố của mình. Tôi đã tìm kiếm điều này trong nhiều giờ
Arshad

1
Làm cách nào để áp dụng truy vấn này với JOINS?
GYaN

@GYaN add tham gia trong khu vực nội phụ truy vấn
sheikh hamza

9
SELECT * FROM table ORDER BY id DESC,datechat desc LIMIT 50

Nếu bạn có trường ngày đang lưu trữ ngày (và giờ) mà cuộc trò chuyện được gửi hoặc bất kỳ trường nào được lấp đầy bởi dữ liệu tăng dần (theo thứ tự của DESC) hoặc dữ liệu giảm dần (thứ tự theo ASC) trên mỗi hàng, hãy đặt nó làm cột thứ hai trên mà dữ liệu phải là thứ tự.

Đó là những gì đã làm việc cho tôi !!!! hy vọng nó sẽ giúp !!!!


7
SELECT * FROM table ORDER BY id DESC LIMIT 50

tiết kiệm tài nguyên thực hiện một truy vấn, không cần thực hiện các truy vấn lồng nhau


1
Truy vấn của bạn sẽ trả về kết quả ngược lại (id giảm dần). Truy vấn của @ newfurniturey sẽ nhận được các hàng được chèn CUỐI CÙNG (nhập LIMITvào id giảm dần) và kết quả cuối cùng sẽ có id tăng dần.
Robin Kanters

1
Giải pháp của bạn sẽ không có được kết quả theo thứ tự đúng thay vào đó nó sẽ nhận được chúng đảo ngược như vậy, sự cần thiết của một đơn đặt hàng bằng cách để có được chúng theo thứ tự đúng một lần nữa
Cobra47

1
Nhưng sau đó bạn chỉ cần thực hiện một php array_reverse () hoặc bất cứ điều gì tương đương bằng ngôn ngữ kịch bản mà bạn chọn. Cơ sở dữ liệu không cần thực hiện công việc đó.
Joe

6
@Joe Không có gì trong câu hỏi cho thấy một ngôn ngữ kịch bản đang được sử dụng, vì vậy đó không phải là một giả định an toàn để đưa ra.
Nick Coons

Câu trả lời mong đợi đã được sắp xếp chỉ bằng cách sử dụng truy vấn cơ sở dữ liệu.
d4ryl3

-2
select * from Table ORDER BY id LIMIT 30

Ghi chú: * idphải là duy nhất. * Bạn có thể kiểm soát số lượng hàng được trả về bằng cách thay thế 30trong truy vấn


1
Bạn có thể vui lòng giải thích giải pháp của bạn? Phần giải thích trong ngoặc dường như là mã, hãy đặt cả câu bên trên / bên dưới mã của bạn. Cảm ơn
deHaar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.