【问题标题】:How to perform page control?如何进行页面控制?
【发布时间】:2010-09-22 07:32:10
【问题描述】:

我的意思是获取有关页面项目数量的信息并使用您需要的 LIMIT 进行 sql 查询的最有效方法。还是我应该获取所有项目,然后使用 php 函数裁剪数组?

现在我执行 2 个查询:首先计算所有项目,然后使用 LIMIT 获取我需要的项目。

好的,我会更具体。例如,我需要在我的页面上显示一个问题以及该问题的 20 个答案。在底部应该有页面控制:链接到下一个,上一个页面等等。我想显示正确数量的链接(答案数/20),当我转到任何链接时,我想收到正确的答案(例如 3d 页面上的 41 到 60)。那么获取项目数量(答案)以显示适当数量的链接并为每个链接获得适当答案的最佳方法是什么?

【问题讨论】:

  • 我不知道你想要完成什么,你能重新提出这个问题吗?
  • 尝试搜索分页,有很多类似的问题已经回答了

标签: php mysql pagination


【解决方案1】:

我猜你想说你想知道查询中有多少项目/答案,但一次最多只能读取 20 个项目,用于分页。

首先:你真的应该找一个分页包;很多很多人之前都遇到过同样的问题,并且可能存在针对您的编程语言和框架的免费/开源和专有解决方案。 (如果您说出您使用的语言,我相信有人可以为您推荐解决方案。)

无论如何,我知道喜欢了解事物的运作方式,所以通常是这样的:

据我所知,分页代码通过使用select count(*) from tblX where something 执行一个查询来计算页面,将此数字除以每页项目数并使用上限(例如 4.1 => 5)。

要列出每页的结果,需要 new 查询;不要担心计数查询比让每个结果丢弃你不需要的结果要快得多不要这样做(这是成为this page 头条新闻的秘诀)。 select * from tblX where something limit Y offset Z 之类的东西,其中 Y 是每页的项目数,Z 是 (requested_page - 1)*Y;第 1 页的偏移量为 0,第 2 页的偏移量为 20(如果 Y 是这样的话)等等。

但不要尝试手动实现,这是不必要的、乏味的且容易出错,最好花时间定制现成的解决方案。

【讨论】:

  • 我更倾向于将它们全部加载到一个数组 (php) 中,将数组从一个页面传递到另一个页面,并在每个页面上列出该数组的一个子集。这样可以避免许多数据库调用。仅当您有大量流量和查询时才真正需要。
  • 如果有 10000 个项目?通过这样的数组?还是每次都查询?
【解决方案2】:

我假设您想要计算要阅读的行数,以便进行分页或类似操作?在您的问题的背景下,我不明白您对 LIMIT 的需求。但是,如果您只想计算找到的行数,请使用以下方法之一。

您选择所有行的计数,例如:

select count(*) as counted, name, address
from contact

或找到行:

SELECT SQL_CALC_FOUND_ROWS, name, address
from contact

这可能是 mysql 特定的,我不确定。

更新:

对于分页,您可以执行以下操作 - (Psuedocode)

$rows = 数组($result)
$num_rows = sql_calc_found_rows
$per_page = 20
$pages = ceil($num_rows / $per_page)

页面
$rows_this_page = 数组()
$rows_this_page = get_values($rows, (min index)$page_number * $per_page - $per_page, (max index)$page_number * $per_page - 1)

【讨论】:

  • 非常感谢,我需要 LIMIT 才能获得适当的项目(答案),否则我应该这样做?
  • 只有在需要已知行数时才使用 LIMIT 。例如,如果您想要前 50 个答案,您可以按最高分排序并限制为 50。那么您就不需要算了。您必须更好地解释您的问题。
  • 好吧,如果我需要从 31 到 50 的答案,我使用 LIMIT 31,20 不是吗?
  • 我想,是的.. 但是你为什么需要行数呢?
  • 在页面底部显示适当数量的链接:num_of_items/items_per_page
猜你喜欢
  • 2011-02-16
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-04
  • 2010-10-18
相关资源
最近更新 更多