SELECT xxx, COUNT('x') CNT FROM `aaa` WHERE 1 AND d > 0 
 GROUP BY xxx HAVING CNT > 1 ORDER BY CNT DESC这样取完是大概3000条,我如何能知道我取到了三千条,因为要做分页,所以我必须能取出一共多少条非常感谢

解决方案 »

  1.   

    select FOUND_ROWS();就可以得到上一个查询返回了多少记录。mysql> select * from t1 where id<6;
    +----+------+-------+------+
    | id | c1   | c2    | i2   |
    +----+------+-------+------+
    |  1 | AA1  | BB342 |    1 |
    |  2 | AA2  | BB727 |    2 |
    |  3 | AA3  | BB611 |    3 |
    |  4 | AA4  | BB875 |    4 |
    |  5 | AA5  | BB542 |    5 |
    +----+------+-------+------+
    5 rows in set (0.00 sec)mysql> select FOUND_ROWS();
    +--------------+
    | FOUND_ROWS() |
    +--------------+
    |            5 |
    +--------------+
    1 row in set (0.06 sec)mysql>
      

  2.   

    PHP 中你可以直接用 int mysql_num_rows(resource result); 得到总行数。
    <?php$link = mysql_connect("localhost", "mysql_user", "mysql_password");
    mysql_select_db("database", $link);$result = mysql_query("SELECT * FROM table1", $link);
    $num_rows = mysql_num_rows($result);echo "$num_rows Rows\n";?>
      

  3.   

    谢谢几位的回复,刚才我没说太清楚,我想要的结果是这样的就是我们做分页处理的时候,不都是这样思路么
    select count(*) from teble where conditions...
    select id, name from table where conditions limit 0, 20一条取总数,一条取分页要显示的数字我现在有个情况要
    SELECT xxx, COUNT('x') CNT FROM `aaa` WHERE 1 AND d > 0 
    GROUP BY xxx HAVING CNT > 1 ORDER BY CNT DESC 就是这种情况下,我如何能取到总数,楼上几位说的都很对的说,不过在写程序中这样操作可能有些不太实际
      

  4.   

    那没办法,你只能先select count(*) from (SELECT xxx, COUNT('x') CNT FROM `aaa` WHERE 1 AND d > 0 
    GROUP BY xxx HAVING CNT > 1 ) t得到总数了。
      

  5.   

    不过很奇怪,为什么在分页前你需要这个总数?一般是只是需要取出当页信息,然后再计算总页数就行了。一般是如下。
    mysql> SELECT SQL_CALC_FOUND_ROWS * FROM t1 limit 10,10;
    +----+------+-------+------+
    | id | c1   | c2    | i2   |
    +----+------+-------+------+
    | 11 | AA11 | BB604 |   11 |
    | 12 | AA12 | BB717 |   12 |
    | 13 | AA13 | BB770 |   13 |
    | 14 | AA14 | BB703 |   14 |
    | 15 | AA15 | BB205 |   15 |
    | 16 | AA16 | BB917 |   16 |
    | 17 | AA17 | BB972 |   17 |
    | 18 | AA18 | BB107 |   18 |
    | 19 | AA19 | BB618 |   19 |
    | 20 | AA20 | BB773 |   20 |
    +----+------+-------+------+
    10 rows in set (0.00 sec)mysql> select FOUND_ROWS();
    +--------------+
    | FOUND_ROWS() |
    +--------------+
    |       499999 |
    +--------------+
    1 row in set (0.00 sec)mysql>