【问题标题】:How can I count total results returned from MySQL query with a limit?如何计算从 MySQL 查询返回的总结果有限制?
【发布时间】: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+

如果没有限制,我如何计算此查询将返回的总行数,以便将其显示给用户?

【问题讨论】:

    标签: php mysql database search


    【解决方案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.. . 有什么想法吗?
    猜你喜欢
    • 2012-10-06
    • 2014-10-09
    • 1970-01-01
    • 2017-06-21
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多