Mysql分页没有偏移

时间:2014-11-16 12:33:10

标签: mysql sql pagination

我们假设我有一张包含这些数据的表格:

Table data

我想通过createdAt列DESC和id列DESC

来订购它
select id, createdAt from post order by createdAt desc, id desc

现在看起来像这样:

ORDER BY createdAt DESC, id DESC

我希望每页分页2个项目,并且出于性能原因,我不想使用offset,只需limit

select id, createdAt from post order by createdAt desc, id desc limit 2

enter image description here

要使用此查询获取接下来的两个项目:

SELECT id, createdAt FROM post  WHERE createdAt <= '2014-11-16 09:11:03' AND (id < '15' OR createdAt < '2014-11-16 09:11:03') ORDER BY createdAt DESC, id DESC LIMIT 2

enter image description here

我可以继续这样下去。获取最后一项createdAtid,然后将其用于next页面查询。

但我正在尝试将previous page查询制定近两天,但还无法找到方法。

这是我已经尝试过的:

从当前结果中获取第一项(而不是最后一项)使用它的idcreatedAt字段并反转查询中的条件(createdAt >=, id >, created at >)。但是这个查询总是给我前两个结果(这是正常的,因为提供这个条件的行是前两个)。

我已经没有想法了。我需要帮助。感谢。

1 个答案:

答案 0 :(得分:3)

您可以命令升序以获得正确的记录:

SELECT id, createdAt 
  FROM post 
 WHERE createdAt >= '2014-11-16 09:11:03' 
   AND (id > '15' OR createdAt > '2014-11-16 09:11:03') ORDER BY createdAt ASC, id ASC
LIMIT 2

并在显示结果集时反向排序。