MYSQL的FOUND_ROWS()函数

For a SELECT with a LIMIT clause, the number of rows that would be returned were there no LIMIT clause

A SELECT statement may include a LIMIT clause to restrict the number of rows the server returns to the client. In some cases, it is desirable to know how many rows the statement would have returned without the LIMIT, but without running the statement again. To obtain this row count, include a SQL_CALC_FOUND_ROWS option in the SELECT statement, and then invoke FOUND_ROWS() afterward

 

比如说有段sql需要取出一张表的前10行,同时又需要取出符合条件的总数。这在某些翻页操作中很常见:   SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10;

在上一查询之后,你只需要用FOUND_ROWS()就能获得查询总数,这个数目是抛掉了LIMIT之后的结果数:SELECT FOUND_ROWS();

其中第一个sql里面的SQL_CALC_FOUND_ROWS不可省略,它表示需要取得结果数,也是后面使用FOUND_ROWS()函数的铺垫。

 

  
  
  
  
  1. $query = "SELECT SQL_CALC_FOUND_ROWS * FROM title WHERE ID >1000 LIMIT 10;"
  2. $result = $db->query($query); 
  3. $line = $db->fetch_row($db->query("SELECT FOUND_ROWS();")); 
  4. print_r($line); 

此时,不用额外的查询,即可得到

 

  
  
  
  
  1. SELECT count(id) FROM tabled WHERE id>1000; 

这样子的结果了。

不过,http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#limit-optimization 说:
只要MySQL已经发送了需要的行数到客户,它将放弃查询,除非你正使用SQL_CALC_FOUND_ROWS

你可能感兴趣的:(FOUND_ROWS())