/*
分頁簡單得很,下面我們主要是講一下關於分頁原理與實現方法。
*/
/*
這樣才能知道分幾頁。
比如說一個列表結果是126行,如果一頁20行的話那麼分7頁,對吧。
我們的代碼經理是這樣的:
計算總行數:select count(*) from tablename where …..
查詢列表select * from tablename where … limit…
我們看這種方式再沒有任何優化的方式下這樣第個列表都是再次查詢。
首先我們假設數據更新頻率不是很高的情況下,我們點第1頁,第2頁 。。。第n頁 其實第一句sql得到的都是同一個結果,這樣是不是後面都在做重復工作呢。那我們第1頁得到結果數後是不是可以將結果一下傳遞下去就行了。
例如我們分頁鏈接第2頁是這樣的 list.php?page=2&count=126
在程序上加一個判斷:
if ($_get['count']) {
$count = $_get['count'];
} else {
$count =select count(*) from tablename where …..
}
這樣優化以後如果我們只有第一頁才計算總數,後面的頁數都不用了,這樣是不是就可以提升了效率。
還有這麼種情況,也就是在模糊查詢的情況下,我們有一個應用,我估計大部分查詢結果數小於20,也就是都只有一頁結果,那麼如果都去計算總數是沒有必要的,而且模糊查詢效率也比較低。所以我突然想到跳出原來的思維,為什麼一定要先計算總行數,再取列表呢?
其實完全可以先查詢列表,如果列表結果數=20,那麼我們再查詢總行數,因為小於20的話,其實只有一頁。總行數就等於查出來的列表結果數。
偽代碼為:
if ($_get['page']<2) {
$list = select * from tablename where … limit 0,20 第一頁時直接查詢前20條
if (count($list)=20) {
$count =select count(*) from tablename where …..
} else {
$count =count($list);
}
} else {
$count = $_get['count'];
$list = select * from tablename where … limit page-1*20,page-1*20+20
}