2012-05-09 127 views
0

我使用下面的查询抢从MySQL数据库的结果:如何计算从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+

我怎么能算行的总金额此查询将返回如果有没有限制,所以我可以显示给用户?

回答

4

SQL_CALC_FOUND_ROWS和 “SELECT FOUND_ROWS()” 是你想要什么:

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows

+0

我实际上已经尝试过,并且得到以下错误... 您的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标记t ('purchase','single_family','usda')和r.id = t.result_id WHERE c.name AND(r.scope ='all'或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(); –

+0

这个过程仍然需要通过2个查询来完成:如果您在提示符下键入该内容,请确保在“OFFSET 0”之后添加了分号。在PHP中,执行初始查询只需添加SQL_CALC_FOUND_ROWS,然后再执行另一个查询“SELECT FOUND_ROWS();” –

+0

非常感谢!这很好 –

3

很简单,只需使用select count(*) from ...代替select * from ...

如果你喜欢做这一切在同一查询中,你有你的答案在这里:

How to count and limit record in a single query in MYSQL?

另外一个SELECT FOUND_ROWS();将是回答。

+0

他要求,而不限制计数。 –

+0

限制并不重要 - 无论如何,计数都是正确的。 –

+0

哦,有趣。 +1 –