SELECT語句中經常可能用LIMIT限制返回行數。有時候可能想要知道如果沒有LIMIT會返回多少行,但又不想再執行一次相同語句。那麼,在SELECT查詢中包含SQL_CALC_FOUND_ROWS選項,然後執行FOUND_ROWS()就可以了:
代碼如下 |
複製代碼 |
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name -> WHERE id > 100 LIMIT 10; 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 。
PHP代碼:
代碼如下 |
複製代碼 |
<?php $sql = "select count(*) from t"; $res = mysql_query($sql); $num = mysql_result($res,0); $sql = "select topic,detail from t limit 5"; //***以下我就不寫了 ?> |
然而用mysql內建函數found_rows();
也可以快速求出總數
PHP代碼:
代碼如下 |
複製代碼 |
<?php $sql = "select sql_calc_found_rows topic,detail from t limit 5"; $sql = "select found_rows()"; $num = mysql_result($res,0); ?> |
這種方法使用時所要注意的問題
引用:
1 必須以select sql_calc_found_rows 開頭
2 這時found_rows() 為 沒有limite 時的行數
以下為一個示範 希望大家看了更加明白
PHP代碼:
代碼如下 |
複製代碼 |
mysql> select count(*) from zd_sort2; +----------+ | count(*) | +----------+ | 20 | +----------+ 1 row in set (0.14 sec) mysql> select sql_calc_found_rows st2_id from zd_sort2 limit 3; +--------+ | st2_id | +--------+ | 1 | | 6 | | 12 | +--------+ 3 rows in set (0.00 sec) mysql> select found_rows(); +--------------+ | found_rows() | +--------------+ | 20 | +--------------+ 1 row in set (0.00 sec) mysql> |
著兩中方法效率如何呢