我有一个查询的效果
SELECT t3.id, a,bunch,of,other,stuff FROM t1, t2, t3 WHERE (associate t1,t2, and t3 with each other) GROUP BY t3.id LIMIT 10,20
我想知道该查询将返回许多行而没有LIMIT(所以我可以显示分页信息)。
通常,我将使用以下查询:
SELECT COUNT(t3.id) FROM t1, t2, t3 WHERE (associate t1,t2, and t3 with each other) GROUP BY t3.id
但是GROUP BY改变了COUNT的含义,取而代之的是,我得到一组代表每个组中唯一t3.id值的行。
当我使用GROUP BY时,是否有一种方法可以对行的总数进行计数?我想避免不得不执行整个查询并只计算行数,因为由于分页值,我只需要行的子集。我正在使用MySQL 5,但我认为这很通用。
MySQL中有一个很好的解决方案。
在关键字SELECT之后紧接着添加关键字SQL_CALC_FOUND_ROWS:
SELECT SQL_CALC_FOUND_ROWS t3.id, a,bunch,of,other,stuff FROM t1, t2, t3 WHERE (associate t1,t2, and t3 with each other) GROUP BY t3.id LIMIT 10,20
之后,使用函数FOUND_ROWS()运行另一个查询:
SELECT FOUND_ROWS();
它应该返回不带LIMIT子句的行数。
请查看此页面以获取更多信息:http : //dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found- rows