【问题标题】:Pagination - Always returns ALL the records in the database分页 - 总是返回数据库中的所有记录
【发布时间】:2012-02-20 20:46:11
【问题描述】:

(a) 我有分页代码之前我问我的问题:

$query = "SELECT COUNT(*) as num FROM $tableName";
$total_pages = mysql_fetch_array(mysql_query($query));
$total_pages = $total_pages[num];   

$total_pages 一直在计算 ALL 数据库中的记录,因为上面列出的代码正在计算所有页面 BEFORE 我进行查询 - 我想要在查询结果之后计数的记录,并从这些结果中获取正确的页数。

在我的 SELECT 语句的一系列代码行之后,我的查询以这样的方式结束(工作正常 - 除了上面概述的分页问题)。

$query = "SELECT * FROM $tableName $qryWhere LIMIT $start, $limit";
$result = mysql_query($query);

在上面之后,接下来是 Pagination 代码的其余部分,以及查询结果。他们都工作。问题是在我查询之前计算所有数据库页面的前 3 行。

提前感谢您为我提供的任何帮助!

【问题讨论】:

  • 专业提示:不要使用mysql_ 函数。它们已经过时了。使用 PDO。
  • 因此,将结果集上的相同过滤器应用于COUNT(*) 调用,一切都应该很好吗?如果您仅基于 `WHERE foo-bar 选择结果,则将其应用于 count 调用...
  • 不完全理解这个问题。通常您想知道表中的记录总数,正如您在第一个代码块中概述的那样,以便您知道 UI 需要多少页。如果您想知道返回了多少条记录,您可以遍历您的结果并计算它们。
  • 什么是qryWhere?这会有所帮助....
  • 我在上面解释过 - 我不知道“如何” - 我的无知 - 我很抱歉......

标签: php mysql


【解决方案1】:

如果您想获取结果的总数(而不仅仅是您在任何时候显示的数量),您可以在运行 'SELECT * FROM $tableName $qryWhere LIMIT $start, $limit 之后运行此查询' 查询:

SELECT FOUND_ROWS();

无论您对初始查询应用的限制如何,这都会告诉您匹配的行数。


如果您想知道在最后一个查询中提取了多少行,请尝试将其修改为:

SELECT *, COUNT(id) as total FROM $tableName $qryWhere LIMIT $start, $limit

这有效地在您的结果中创建了一个新列,其中包含您在应用限制的情况下提取的总结果。 (我假设您有一个名为“id”的列,如果没有,请使用不同的列名进行计数。

【讨论】:

  • 如果您使用 fetch_array,found_rows 将为 0 - 如果您的意思是这样的话。
  • LIKE THIS?: $query = "SELECT * FROM $tableName $qryWhere LIMIT $start, $limit"; $result = mysql_query($query); $total_pages = SELECT *, COUNT(id) as total FROM $tableName $qryWhere LIMIT $start, $limit;
  • 这是指我回复的前半部分 - 还是后半部分。我仍然不清楚你要做什么
【解决方案2】:

FOUND_ROWS() 仅在您使用 SQL_CALC_FOUND_ROWS 修饰符完成选择查询时才有效。否则它只返回 0:

$sql = "SELECT SQL_CALC_FOUND_ROWS * FROM $tableName $qryWhere LIMIT $start, $limit;";
$result = mysql_query($sql) or die(mysql_error());
$found = mysql_query("SELECT FOUND_ROWS();") or die(mysql_error());

$result 将仅包含在您的限制子句中指定的行,而 $found 将包含在没有限制子句的情况下将找到多少行。

【讨论】:

  • 我试过了,PAGINATION 仍然返回 5 页 - 所选结果和所有其余记录 - 尝试点击 1 2 3 4 5 分页结果。例如,由于仅找到 17 条记录,某些结果不应该停留在第 2 页或类似的地方吗?谢谢!!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多