【问题标题】:MySQL/PHP - Pagination, sortingMySQL/PHP - 分页、排序
【发布时间】:2012-04-23 19:58:36
【问题描述】:

我正在尝试将用户提交的信息分页到目录中。起初我有这样的事情: /?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 位,肯定会有重叠。

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

【问题讨论】:

  • 您的第一种方法对我来说看起来不错。你能说清楚你为什么说错了吗?
  • 离题,但我建议升级到使用 Jquery 进行分页。
  • 我同意@GustavoVargas,你为什么放弃你的第一个实现?我同意 Norse 的观点,您可能正在重写可以从框架中实现的功能。
  • 在 MySQL 中使用 LIMIT 关键字并不妨碍它读取前面的记录。例如:SELECT * FROM my_table LIMIT 10000, 20;意味着 MySQL 仍然会读取前 10000 条记录并在生成我们之后的 20 条记录之前将它们丢弃。因此,在对大型数据集进行分页时,高页码意味着较长的加载时间。

标签: php mysql


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      如果我理解得很好,我认为 SQL 语句中 WHERE 子句中的 LIKE 运算符应该会有所帮助......但我可能错了,你能详细说明一下到底是什么错误吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-12
        • 2017-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-17
        • 1970-01-01
        • 2011-02-06
        相关资源
        最近更新 更多