分页-始终返回数据库中的所有记录


Pagination - Always returns ALL the records in the database

(a)我有分页代码BEFORE我询问我的查询:

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

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

在我的SELECT语句的一系列代码行之后,我的查询就这样结束了(它运行得很好——除了上面概述的分页问题)。

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

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

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

如果您想获得结果的总数(而不仅仅是您在任何一次显示的数量),您可以在运行"SELECT*FROM$tableName$qryWhere LIMIT$start,$LIMIT"查询后运行此查询:

SELECT FOUND_ROWS();

这将告诉您匹配的行数,而不管您对初始查询应用了什么限制。


如果你想知道你在上一次查询中抽出了多少行,试着将其修改为:

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

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

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将只包含limit子句中指定的行,而$find将包含在没有limit子句的情况下会找到多少行。