如何计算从 MySQL 查询返回的总结果有限制?
Posted
技术标签:
【中文标题】如何计算从 MySQL 查询返回的总结果有限制?【英文标题】:How can I count total results returned from MySQL query with a limit? 【发布时间】:2012-05-09 23:20:14 【问题描述】:我正在使用以下查询从 mysql 数据库中获取结果:
$query = $this->db->query("
SELECT * FROM results r
INNER JOIN categories c on r.id = c.result_id
INNER JOIN tags t on r.id = t.result_id
WHERE c.name in ('$purpose', '$prop_type', '$loan_type')
$tag_string
AND ( r.scope = 'all' OR r.scope = '$subdomain' )
GROUP BY r.id
HAVING COUNT(c.c_id) = 3
ORDER BY r.usefulness DESC
LIMIT 10 OFFSET $offset
");
返回的结果可能是 500+
如果没有限制,我如何计算此查询将返回的总行数,以便将其显示给用户?
【问题讨论】:
【参考方案1】:SQL_CALC_FOUND_ROWS 和“SELECT FOUND_ROWS()”是你想要的:
http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows
【讨论】:
我实际上尝试过并得到以下错误...您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 10 行的“SELECT FOUND_ROWS()”附近使用正确的语法 SELECT SQL_CALC_FOUND_ROWS * FROM results r INNER JOIN categories c on r.id = c.result_id INNER JOIN tags t on r .id = t.result_id WHERE c.name in ('purchase', 'single_family', 'usda') AND (r.scope = 'all' OR r.scope = 'redflagwiki') GROUP BY r.id HAVING COUNT( c.c_id) = 3 ORDER BY r.usefulness DESC LIMIT 10 OFFSET 0 SELECT FOUND_ROWS(); 这个过程仍然需要在 2 个查询中完成:如果您在提示符下键入,请确保在“OFFSET 0”之后添加分号。在 php 中,只添加 SQL_CALC_FOUND_ROWS 进行初始查询,然后以“SELECT FOUND_ROWS();”进行另一个查询【参考方案2】:很简单,用select count(*) from ...
代替select * from ...
如果您喜欢在同一个查询中完成所有操作,您可以在这里得到答案:
How to count and limit record in a single query in MYSQL?
另外一个SELECT FOUND_ROWS();
就是答案。
【讨论】:
他要求计数没有限制。 当然,它仍然需要使用select count(*)
进行第二次查询,所以FOUND_ROWS()
似乎是要走的路。
遇到这个问题...我认为这与我的查询的 HAVING COUNT 行有关,当我尝试使用 select count(*) 计数时,计数始终为 3.. . 有什么想法吗?以上是关于如何计算从 MySQL 查询返回的总结果有限制?的主要内容,如果未能解决你的问题,请参考以下文章