在mysql表中选择行号n后面的下一行m行

时间:2015-02-14 20:21:58

标签: mysql

在带有" 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中实现了?

1 个答案:

答案 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实现了子查询 - 增加了查询处理的开销。