在带有" R行"的mysql表中我想选择下一行" m行"在" nth row"之后以这种方式,如果n + m> R,它从表的末尾返回R-n行,从表的开头返回m + n-R行。
例如在此表中:
id firstname
1 john
2 robert
3 bob
4 adam
5 david
我希望以这种方式获得第3行(bob)之后的下4行:
4 adam
5 david
1 john
2 robert
我搜索了很多,发现以下查询只返回最后两行。
SELECT * FROM table LIMIT 4 OFFSET 3;
我知道我可以使用php和一堆条件语句来实现这个特定的查询,但我很想知道它是否已经在mysql中实现了?
答案 0 :(得分:0)
一种方法是在子查询中使用union all
。这允许您“复制”表,在表的末尾使用新计算的id:
select t.*
from ((select t.*, id as newid from table t) union all
(select t.*, id + cnt as newid
from table t cross join
(select count(*) as cnt from table) cnt
)
) t
order by newid
limit 4 offset 3;
对于小桌子,这应该没问题。对于较大的表,您可能不希望这样做,因为MySQL实现了子查询 - 增加了查询处理的开销。