一尘不染

使用GROUP BY查询获取行数

sql

我有一个查询的效果

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,但我认为这很通用。


阅读 354

收藏
2021-05-05

共1个答案

一尘不染

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

2021-05-05