如何计算从 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 查询返回的总结果有限制?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法计算 MySql 中列的总数据大小?

MySQL - 我如何计算空值而不是空值?

PHP查询mysql的时候用了like和LIMIT分页,如何获得未分页但是like了的总数据量

根据查询的总结果检测页数的问题

如何获得两个查询结果集之间的差异

如何将此查询从SQL(mysql)转换为Eloquent(Laravel)