2010-02-20 18 views
6

SELECT ID FROM表LIMIT 8,3MySQL的反向無倒序

結果在8,9,10

,但我需要10,9,8

你怎麼能這樣做呢?如果添加 「ORDER BY ID DESC」 它得到3,2,1

+1

聞起來像功課。 – 2010-02-20 09:54:16

+2

可能,但功課不被禁止。他已經表明了這個問題,他想要做什麼,他嘗試了什麼,結果如何,並解釋了爲什麼這是不正確的。你還想要什麼? – 2010-02-20 09:59:16

+0

用於新聞分頁。但問題是有兩個新聞之王:正常人和小人。每個頁面應該包含固定數量的正常新聞和任何數量的小新聞。 所以限制總是改變。 – Qiao 2010-02-20 10:05:02

回答

6

把你的查詢子查詢中,然後扭轉外的順序進行選擇:

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

測試數據:

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 

結果:

10 
9 
8 

注意,在子查詢中的ORDER BY要求,否則順序是不確定的。感謝Lasse指出這一點!

3

首先,如果你不訂購可言,那你有8,9,10現在可能與使用的索引。你確定這將在未來不會改變嗎?

什麼,我得到的是,除非你指定的順序,你不應該依賴於它是一個你想要的。

所以我肯定會命令添加到選擇指定你想要什麼。否則,你只會說「給我這個表中的3個數字」,而不是「按照這些規則給我3個數字」。爲什麼是3,2,1錯,但是8,9,10是對的?你沒有指定。

總之,要回答你的問題,你必須限制,這意味着一個子查詢後訂購:

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

不過,我想試試這個SQL代替,有關部分關於指定:

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

+1:關於在內部選擇中包括訂單的好處。如果沒有它,他的問題就沒有意義了 - 內部查詢的順序是不確定的,沒有順序。 – 2010-02-20 10:45:50