[請益] MySQL 該如何分頁?

看板PHP作者 (骨傲風清(掛網))時間17年前 (2008/05/19 20:38), 編輯推噓5(5011)
留言16則, 6人參與, 最新討論串1/1
這是現在我的分頁 Code $pageN1 = 10; $result = mysql_query('SELECT `a`, `id` FROM `a2` ORDER BY `id`'); $Rmount=@mysql_num_rows($result); $Rseek = ($page1-1)*$pageN1; if($Rmount>$Rseek) { @mysql_data_seek($result,$Rseek); } if($Rmount != 0) { $start = 1; $end = ceil($Rmount/$pageN1); if($end > 10 and $page1 > 5) { $start = $page1 - 4; } if($end + 5 < $end) { $end = $end + 5; } echo '第 '; for($i=$start;$i<=$end;$i++) { $page1 = $i; echo ' <a href="a.php?page0='.$page0.'&page1='.$page1.''.$mbURL.'">'.$i.'</a> '; } echo '頁'; $page1 = ($_GET['page1']*1>0)?$_GET['page1']:1; } 我是先把要的資料抓出來,利用 Count 去計算筆數, 不過我現在有個小問題,這樣做會不會太吃資源呢? 當我的資料量是 10 萬筆以上,這樣做分頁明顯不好, 我現在想到的是,將筆數另外記錄在一個資料表中, 不過似乎有點小麻煩 囧mmmmmmmmm 不知道有沒有人知道更好的做法呢? 萬分感激! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.168.222

05/19 20:51, , 1F
可以用 Mysql 的 Limit 試看看~
05/19 20:51, 1F

05/19 21:10, , 2F
推limit
05/19 21:10, 2F

05/19 21:33, , 3F
3328篇
05/19 21:33, 3F

05/19 22:18, , 4F
3328我看過了 ... 但是這樣等於要對 sql 下兩次指令,
05/19 22:18, 4F

05/19 22:19, , 5F
這樣真的會比較快?而且 * 取出的東西更多,不是嗎?
05/19 22:19, 5F

05/19 22:20, , 6F
我不用撈出資料庫全部的資料,查詢也只下一次而已 ...
05/19 22:20, 6F

05/19 23:36, , 7F
select count(*)並不是撈出所有資料.當資料量多的時候,
05/19 23:36, 7F

05/19 23:38, , 8F
先使用select count(*)得到筆數是會比你使用的方式的.
05/19 23:38, 8F

05/19 23:39, , 9F
雖然多一次查詢,但是兩者回傳的資料量相差非常多.
05/19 23:39, 9F

05/19 23:39, , 10F
不過要注意一下你使用的mysql資料表類型.innodb的話,單純
05/19 23:39, 10F

05/19 23:40, , 11F
select count(*)而沒有where條件,速度很慢.如果是myisam
05/19 23:40, 11F

05/19 23:40, , 12F
資料表就沒差了,很快.但是通常這種狀況都會搭配where條件
05/19 23:40, 12F

05/19 23:41, , 13F
在這個狀況下innodb就不會那麼慢了(要看狀況).
05/19 23:41, 13F

05/19 23:57, , 14F
丟進 session,多開個欄位紀錄 SQL statement 是否相同,
05/19 23:57, 14F

05/19 23:58, , 15F
相同的話就直接從 session 撈,不同再去 DB 撈資料
05/19 23:58, 15F

05/20 01:54, , 16F
原來我一直誤解了,謝謝各位 ^^
05/20 01:54, 16F
文章代碼(AID): #18CNJ4tO (PHP)
文章代碼(AID): #18CNJ4tO (PHP)