作者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