在mySql偏移中向后选择前3个ID

时间:2013-09-22 19:28:17

标签: mysql sql

来自值为1 to 50的测试表如何从给定数字向后选择3行?

例如:给定数字= 20. 3 id后面= 17。

我实际上是试图向后偏移。如何实现这一目标?

2 个答案:

答案 0 :(得分:3)

按降序排序项目,然后使用带有偏移量的标准LIMIT

SELECT * FROM table ORDER BY id DESC LIMIT 20, 3

您可以在子查询中使用它来按升序重新排序项目:

select * from (select * from TEST order by id desc LIMIT 5, 3) p order by id asc

工作DEMO

更新

只占一行(在您的示例中为第17行,2nd in my demo):

select *
from (select * from TEST order by id desc LIMIT 5, 3) p
order by id asc
limit 1

UPDATE2

无论表中有多少行,查询返回同一行:

select * from
(select * from
 (select * from TEST order by id asc LIMIT 5) p2
 order by id desc LIMIT 4) p
order by id asc
limit 1

答案 1 :(得分:0)

保持简单?比如下面的查询。

select 
 *
from 
 test
where 
 id = 5 - 3

http://sqlfiddle.com/#!2/74afb/3 这样就没有文件排序,如果你做了索引就可以使用索引。

此外,查询优化器会将此查询重写为如下所示

select 
 test.id as 'id'
from 
 test
where 
 test.id = 2

因为在运行查询之前计算了减法(5 - 3)= 2。

您可以通过运行这些查询来看到这一点

explain extended select * from test where id = 5 - 3;
show warnings;