是否有可能在特定行之后查询下一个n个结果?

时间:2015-09-08 08:40:38

标签: mysql

通常,在对SQL查询进行分页时,我们使用offset和limit来选择行页面。但是,如果在OFFSET之前,在页面请求之间插入或删除了行,则对下一页的请求将跳过行或复制先前的行。

考虑像

这样的查询
SELECT id FROM t
ORDER BY // a complex, dynamic order clause
OFFSET ? LIMIT ?

在以下场景中:

  1. 使用OFFSET=0 LIMIT=1
  2. 查询
  3. 其他人删除刚刚返回的第一行
  4. 使用OFFSET=1 LIMIT=1
  5. 查询下一页

    应该在#3中返回的行实际上会被OFFSET=1隐藏。

    如果有办法说“在id = [last row's id]”的行之后给我下一行m而不是“跳过n行然后给我m行”,这可以非常简单地避免。是否有运营商在MySQL中执行此操作?基本上,我正在寻找CouchDB的startkey

1 个答案:

答案 0 :(得分:2)

不确定。如果您要对三列ORDER BY a, b, c进行排序,并且知道您显示的最后一条记录的值为a0, b0, c0,那么这些列与PK id0一样,那么您可以执行以下操作:

WHERE    (a, b, c, pk) > (a0, b0, c0, id0)
ORDER BY a, b, c, pk
LIMIT    m  -- don't bother with offset anymore