2008年12月25日 星期四

在mysql取得limit之外的總筆數

標題有點難下,我來舉個例子。

一般做網站都需要做到一個功能... 分頁。

除非單純只有「上一頁」或「下一頁」

一般都會有個頁數和總頁數。

這個就困難了。

一般來說取得第二頁的方式是... (當一頁10筆的情況下)

select * from xxx limit 10,10;

然後再算出總數

select count(*) from xxx;

雖然說mysql會快取,但是如果量大的話,還是兩次完整的查詢。

其實可以用更快的方法算出總數
在select後面加一串指令
SELECT SQL_CALC_FOUND_ROWS * from xxx limit 10,10; /* 也可以不加SQL_CALC_FOUND_ROWS,加了會比較好,文件寫的*/

中間不要做其它的查詢,取得總數。
SELECT FOUND_ROWS(); /* 取得總數 */

雖然都是兩次query,但這種方法比較快,因為是「順便」把算出來的總數,從記憶體中丟出來的。 
當然時看到這個方法,真的很高興,希望你們也是。

參考資料:

http://www.arraystudio.com/as-workshop/mysql-get-total-number-of-rows-when-using-limit.html