2012-11-22 63 views
2

我想運行此查詢如何選擇最後但從MySQL表10行

select * 
from table 
order asc 
limit N; 

其中N是行的總數減去10

SELECT COUNT(*) FROM (SELECT * FROM table) 

返回總作爲189所以,在這種情況下,我想我的限制是179

回答

3

如果順序並不重要,你可以使用失調的limit

注意,有一個「直到結束表」沒有實際價值。 MySQL Documentation建議使用「一些大數」作爲第二個參數。

SELECT * 
FROM table1 
order by ID DESC 
LIMIT 10, 999999999999999 

如果你想按升序你以後可以應用不同的排序:

SELECT 
    * 
FROM 
    (SELECT * 
    FROM table1 
    ORDER BY ID DESC 
    LIMIT 10, 999999999999999) x 
ORDER BY 
    ID ASC 
+0

謝謝,非常感謝 – user1183367

+0

創造性的答案!您也可以使用存儲過程來定義OP正在查找的限制,但是我懷疑這超出了請求/超出範圍的範圍。 – nickhar

+0

是的,在存儲過程(或PHP)中,您可以先查詢計數以確定限制。這甚至可能會更快。另一種可能性,特別是從PHP使用時,只是查詢所有內容並忽略最新的10行。但是,我認爲單個查詢中的解決方案是首選,除非它使查詢過於複雜或太慢。 – GolezTrol

0

不確定是否最有效的,但如果您只有一個字段作爲主鍵,這應該工作。

select * 
from T1 
where 
    T1.id not in (
     select top(10) id 
     from T1 
     order by id desc 
    ) 
order by 
    id; 

它會通過您的訂單得到最後一行,然後您可以通過密鑰排除。

編輯:

更重要的是,不是沒有,你可以使用一個左外連接。

select 
    T1.* 
from T1 
left outer join (select top(10) id from Enums_Tables order by id desc) as T2 
on 
    T1.id = T2.id 
where 
    T2.id is null;