作者cleanwind (骨傲風清(掛網))
看板PHP
標題[請益] MySQL 該如何分頁?
時間Mon May 19 20:38:27 2008
這是現在我的分頁 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
1F:推 PretenderY:可以用 Mysql 的 Limit 試看看~ 05/19 20:51
2F:推 arrack:推limit 05/19 21:10
3F:推 shadowjohn:3328篇 05/19 21:33
4F:→ cleanwind:3328我看過了 ... 但是這樣等於要對 sql 下兩次指令, 05/19 22:18
5F:→ cleanwind:這樣真的會比較快?而且 * 取出的東西更多,不是嗎? 05/19 22:19
6F:→ cleanwind:我不用撈出資料庫全部的資料,查詢也只下一次而已 ... 05/19 22:20
7F:推 MrMarcus:select count(*)並不是撈出所有資料.當資料量多的時候, 05/19 23:36
8F:→ MrMarcus:先使用select count(*)得到筆數是會比你使用的方式的. 05/19 23:38
9F:→ MrMarcus:雖然多一次查詢,但是兩者回傳的資料量相差非常多. 05/19 23:39
10F:→ MrMarcus:不過要注意一下你使用的mysql資料表類型.innodb的話,單純 05/19 23:39
11F:→ MrMarcus:select count(*)而沒有where條件,速度很慢.如果是myisam 05/19 23:40
12F:→ MrMarcus:資料表就沒差了,很快.但是通常這種狀況都會搭配where條件 05/19 23:40
13F:→ MrMarcus:在這個狀況下innodb就不會那麼慢了(要看狀況). 05/19 23:41
14F:推 JoeHorn:丟進 session,多開個欄位紀錄 SQL statement 是否相同, 05/19 23:57
15F:→ JoeHorn:相同的話就直接從 session 撈,不同再去 DB 撈資料 05/19 23:58
16F:→ cleanwind:原來我一直誤解了,謝謝各位 ^^ 05/20 01:54