我想运行此查询如何选择最后但从MySQL表10行
select *
from table
order asc
limit N;
其中N是行的总数减去10
SELECT COUNT(*) FROM (SELECT * FROM table)
返回总作为189所以,在这种情况下,我想我的限制是179
我想运行此查询如何选择最后但从MySQL表10行
select *
from table
order asc
limit N;
其中N是行的总数减去10
SELECT COUNT(*) FROM (SELECT * FROM table)
返回总作为189所以,在这种情况下,我想我的限制是179
如果顺序并不重要,你可以使用失调的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
不确定是否最有效的,但如果您只有一个字段作为主键,这应该工作。
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;
谢谢,非常感谢 – user1183367
创造性的答案!您也可以使用存储过程来定义OP正在查找的限制,但是我怀疑这超出了请求/超出范围的范围。 – nickhar
是的,在存储过程(或PHP)中,您可以先查询计数以确定限制。这甚至可能会更快。另一种可能性,特别是从PHP使用时,只是查询所有内容并忽略最新的10行。但是,我认为单个查询中的解决方案是首选,除非它使查询过于复杂或太慢。 – GolezTrol