0

我正在尝试将用户提交的信息分页到目录中。起初我有这样的事情: /?page=3&count=20&sort=date

$floor = ($page-1)*$count;
$ceiling = $count;
SELECT * FROM catalog ORDER BY date ASC LIMIT $floor, $ceiling

正如我所读到的,这很糟糕,因为它会计算所有结果,而不是停在极限(地板+天花板)。

现在,我试图通过对页面上的最后一项进行分页来使其更快

/?last_date=2012&count=20&sort=date

$ceiling = $count;
SELECT * FROM catalog WHERE date>$last_date ORDER BY date ASC LIMIT $ceiling

但是,这行不通吗?有些日期将是相同的。为了争论,让我们假设我不能使用更精确的时间戳。例如,按价格排序只会到小数点后 2 位,而且肯定会有重叠。

我可以做些什么来使这项改进发挥作用,还是应该恢复到以前的查询?

4

3 回答 3

0

If i understand it good, i think the LIKE operator in WHERE Clause in you SQL Statement should help... But i can be wrong, can you more specify what's exactly wrong?

于 2012-04-24T19:33:00.397 回答
0

我最终使用了我的第一个分页示例。

于 2012-04-24T19:26:48.467 回答
0

为了使用它,您必须在两个方向上按日期进行限制。如果每个日期范围太长,您可以做的是多页,否则,选择整个日期集。缺点是页面大小会有些随意,并且在某些情况下可能需要更长的时间来分页浏览结果。

这意味着您还必须首先在该日期范围内执行 count(),以便您知道下一页是否在此日期范围内或下一个日期范围内。

于 2012-04-23T20:06:21.940 回答