2012-11-22 61 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;