我对…有一个疑问。
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
我想知道这个查询返回的总行数没有限制(这样我就可以显示分页信息)。
通常,我会使用以下查询:
SELECT COUNT(t3.id) FROM t1, t2, t3
WHERE (associate t1,t2, and t3 with each other)
GROUP BY t3.id
然而,group BY改变了计数的含义,取而代之的是,我得到了一组表示每个组中唯一t3.id值的行数。
当我使用GROUP BY时,有没有办法获得总行的计数?我希望避免执行整个查询并只计算行数,因为我只需要行的一个子集,因为值是分页的。我使用的是MySQL 5,但我认为这很通用。
发布于 2008-12-13 04:26:57
在MySQL中有一个很好的解决方案。
在关键字SQL_CALC_FOUND_ROWS后面添加关键字SELECT:
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
发布于 2008-12-13 04:27:55
“一堆其他东西”都是集合体吗?我想是的,因为你的GROUP BY只有t3.id。如果是这样的话,这应该是可行的:
SELECT
COUNT(DISTINCT t3.id)
FROM...
当然,另一个选择是:
SELECT
COUNT(*)
FROM
(
<Your query here>
) AS SQ
我不使用MySQL,所以我不知道这些查询在那里是否有效。
发布于 2012-05-10 20:11:58
使用子查询:
SELECT COUNT(*) FROM
(
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
)
as temp;
所以temp包含行数。
https://stackoverflow.com/questions/364825
复制相似问题