found_rows()使用


【轉】https://blog.csdn.net/myweishanli/article/details/40584597
在mysql中 FOUND_ROWS()與COUNT(*)都可以統計記錄,如果都一樣為什么會有兩個這樣的函數呢,下面我來介紹SELECT FOUND_ROWS()與COUNT(*)用法區別
 

SELECT語句中經常可能用LIMIT限制返回行數。有時候可能想要知道如果沒有LIMIT會返回多少行,但又不想再執行一次相同語句。那么,在SELECT查詢中包含SQL_CALC_FOUND_ROWS選項,然后執行FOUND_ROWS()就可以了:

 
  1.  
    mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
  2.  
    -> WHERE id > 100 LIMIT 10;
  3.  
    mysql> SELECT FOUND_ROWS();

 

COUNT(*) 的稍微不同之處在於,它返回檢索行的數目, 不論其是否包含 NULL值。

SELECT 從一個表中檢索,而不檢索其它的列,並且沒有 WHERE子句時, COUNT(*)被優化到最快的返回速度。例如:

 
mysql> SELECT COUNT(*) FROM tablename;

 

這個優化僅適用於 MyISAM表, 原因是這些表類型會儲存一個函數返回記錄的精確數量,而且非常容易訪問。對於事務型的存儲引擎(InnoDB, BDB), 存儲一個精確行數的問題比較多,原因是可能會發生多重事物處理, 而每個都可能會對行數產生影響。

COUNT(DISTINCT expr,[expr...])

返回不同的非NULL值數目。

若找不到匹配的項,則COUNT(DISTINCT)返回 0 。

 

  1.  
    <?php
  2.  
    $sql = "select count(*) from t";
  3.  
    $res = mysql_query($sql);
  4.  
    $num = mysql_result($res, 0);
  5.  
    $sql = "select topic,detail from t limit 5";
  6.  
    //***以下我就不寫了
  7.  
    ?>

 

然而用mysql自帶函數found_rows();

也可以快速求出總數

  1.  
    <?php
  2.  
     
  3.  
    $sql = "select sql_calc_found_rows topic,detail from t limit 5";
  4.  
    $sql = "select found_rows()";
  5.  
    $num = mysql_result($res, 0);
  6.  
    ?>


這種方法使用時所要注意的問題
引用:
1 必須以select sql_calc_found_rows 開頭
2 這時found_rows() 為 沒有limite 時的行數
以下為一個演示 希望大家看了更加明白

 

  1.  
    mysql> select count(*) from zd_sort2;
  2.  
    +----------+
  3.  
    | count(*) |
  4.  
    +----------+
  5.  
    | 20 |
  6.  
    +----------+
  7.  
    1 row in set (0.14 sec)
  8.  
     
  9.  
    mysql> select sql_calc_found_rows st2_id from zd_sort2 limit 3;
  10.  
    +--------+
  11.  
    | st2_id |
  12.  
    +--------+
  13.  
    | 1 |
  14.  
    | 6 |
  15.  
    | 12 |
  16.  
    +--------+
  17.  
    3 rows in set (0.00 sec)
  18.  
     
  19.  
    mysql> select found_rows();
  20.  
    +--------------+
  21.  
    | found_rows() |
  22.  
    +--------------+
  23.  
    | 20 |
  24.  
    +--------------+
  25.  
    1 row in set (0.00 sec)
  26.  
     
  27.  
    mysql>


----------------------------------分割線-------------------------------------

測試:

查詢結果1顯示查詢的數據,查詢結果2顯示當前where 條件內的總條數

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM