2010-02-20 26 views
6

SELECT id FROM tên_bảng LIMIT 8, 3MySQL đảo ngược trật tự mà không DESC

kết quả trong tháng 8,9,10

nhưng tôi cần 10,9,8

Làm thế nào bạn có thể làm điều này? Nếu bạn thêm "ORDER BY id DESC" nó được 3,2,1

+1

Có mùi giống như bài tập về nhà. –

+2

Có thể, nhưng bài tập về nhà không bị cấm. Ông đã cho thấy vấn đề, những gì ông muốn làm, những gì ông đã cố gắng, kết quả, và giải thích tại sao điều đó không đúng. Nhiều hơn những gì bạn muốn? –

+0

Nó dành cho phân trang tin tức. Nhưng vấn đề là có hai vị vua tin tức: bình thường một và nhỏ. Mỗi trang phải chứa số lượng tin tức bình thường cố định và bất kỳ số lượng tin tức nhỏ nào. Vì vậy, giới hạn luôn thay đổi. – Qiao

Trả lời

6

Đặt câu hỏi của bạn trong một subselect và sau đó đảo ngược trật tự trong ngoài chọn:

SELECT id from (
    SELECT id FROM table ORDER BY id LIMIT 8, 3 
) AS T1 ORDER BY id DESC 

Test data:

CREATE TABLE table1 (id INT NOT NULL); 
INSERT INTO table1 (id) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11); 

SELECT id from (
    SELECT id FROM table1 ORDER BY id LIMIT 8, 3 
) AS T1 ORDER BY id DESC 

Kết quả:

10 
9 
8 

Lưu ý rằng ORDER BY trong subquery là cần thiết nếu không thì thứ tự là không xác định. Cảm ơn Lasse vì đã chỉ ra điều này!

3

Trước hết, nếu bạn không đặt hàng, bạn có 8,9,10 ngay bây giờ có thể liên quan đến chỉ mục được sử dụng. Bạn có chắc chắn điều này sẽ không thay đổi trong tương lai không?

Điều tôi nhận được là trừ khi bạn chỉ định đơn đặt hàng, bạn không nên dựa vào đó là thứ bạn muốn.

Vì vậy, tôi chắc chắn sẽ thêm đơn hàng vào lựa chọn đó để chỉ định những gì bạn muốn. Nếu không, bạn chỉ nói "cho tôi 3 số từ bảng này", không "cho tôi 3 số từ bảng này theo các quy tắc này". Tại sao 3,2,1 sai nhưng 8,9,10 phải không? Bạn không chỉ định.

Dù sao, để trả lời câu hỏi của bạn, bạn phải đặt hàng sau khi giới hạn, có nghĩa là một subselect:

SELECT id FROM (
    SELECT id FROM table LIMIT 8, 3 
) AS dummy ORDER BY id DESC 

Tuy nhiên, tôi sẽ cố gắng SQL này thay vào đó, liên quan đến một phần về cách xác định:

SELECT id FROM (
    SELECT id FROM table ORDER BY id LIMIT 8, 3 
) AS dummy ORDER BY id DESC 
+0

+1: Điểm tốt về việc bao gồm một đơn hàng bằng cách chọn bên trong. Câu hỏi của anh ta không thực sự có ý nghĩa nếu không có nó - thứ tự của truy vấn bên trong là không xác định mà không có thứ tự. –

Các vấn đề liên quan