来自值为1 to 50
的测试表如何从给定数字向后选择3行?
例如:给定数字= 20. 3 id后面= 17。
我实际上是试图向后偏移。如何实现这一目标?
答案 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;