0

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

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

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

4

2 回答 2

2

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

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

无论如何,我知道想知道事情是如何运作的,所以通常是这样的:

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

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

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

于 2008-11-14T09:46:05.273 回答
1

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

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

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

或找到行:

SELECT SQL_CALC_FOUND_ROWS, name, address
from contact

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

更新:

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

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


$rows_this_page = array()
$rows_this_page = get_values($rows, (min index)$page_number * $per_page - $per_page, (max index)$page_number * $per_page - 1)

于 2008-11-14T08:24:23.037 回答