php分頁代碼與分頁原理

來源:互聯網
上載者:User

/*
分頁簡單得很,下面我們主要是講一下關於分頁原理與實現方法。
*/
/*
這樣才能知道分幾頁。
比如說一個列表結果是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
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.