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

时间:2012-02-20 20:46:11

标签: php mysql

(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);

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

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

2 个答案:

答案 0 :(得分:1)

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

SELECT FOUND_ROWS();

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


如果您想了解在上一个查询中提取的行数,请尝试将其修改为:

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

这样可以有效地在结果中创建一个新列,并根据应用的限制提取总结果。 (我假设你有一个名为'id'的列,如果没有,请使用不同的列名进行计数。

答案 1 :(得分:0)

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