我有一个简单的查询,如下所示:
$q = "SELECT * FROM blah WHERE disabled = '0'";
现在要进行分页,我需要添加LIMIT到查询中,因此:
LIMIT
$q = "SELECT * FROM blah WHERE disabled = '0' LIMIT 10,20";
而且,我想知道带有的所有行的数量mysql_num_rows,但是在上面的查询中它总是10,因为我限制了结果,所以对于所有行的数量,我需要再次执行相同的查询而不使用LIMIT语句。
mysql_num_rows
并且以相同的方式两次运行相同的查询以获取所有行的数量是愚蠢的,有人有更好的解决方案吗?
谢谢
MySQL支持一个FOUND_ROWS()函数,该函数可以查找前一个有限查询将返回的无限数量的行。
FOUND_ROWS()
SELECT SQL_CALC_FOUND_ROWS * FROM blah WHERE disabled = '0' LIMIT 10,20 SELECT FOUND_ROWS();
需要注意的是(a)您需要包括SQL_CALC_FOUND_ROWS选项,和(b),这是一个将另一个RDBMS不开展工作的具体MySQL扩展(虽然每个 可能 有自己这样做的方式。)
SQL_CALC_FOUND_ROWS
即使不一定会觉得这不是最好的做事方式;您仍然必须发出两个语句,要引入非标准的SQL,实际的执行COUNT速度可能与简单的执行速度相似SELECT COUNT(*)...。我本人倾向于遵循标准的做法。
COUNT
SELECT COUNT(*)...