PHP网页设计php+mysql分页处置的切磋
刚开始因为习惯于ASP格式的写法,总是在这些方面出现问题,自己还总是找不到问题所在,这就提醒了自己,在写代码的时候一定要认真,不能粗心地老是少个“;”或者字母大小写不分,要不然很可能找半天都找不到错误。mysql|分页 php+mysql分页处置的切磋罕见的分页处置流程为:
1、用select count(*) from tbl_name获得待分页的总纪录数
2、依据每页的纪录数盘算出总页数:总页数 = ceil(总纪录数/每页纪录数)
3、依据以后页号盘算出肇端地位:肇端地位 = (以后页号-1)*每页纪录数
4、用select * from tbl_name limit 肇端地位,每页纪录数 获得待显示纪录
5、列表输入相干信息
在这个流程中,数据库需求两次遍历表才干失掉所需数据。虽然limit会在失掉指定纪录数后会终止遍历,但后面直到“肇端地位”的检索是华侈失落的。
这里提出一种新算法与人人会商:
1、使用mysql的用户变量,朋分并提取每页肇端的id号。
2、查询了局的纪录数即为总页数
3、依据以后页号获得以后页的肇端id
4、用select * from tbl_name where id>=肇端id limit 每页纪录数 获得待显示纪录
5、列表输入相干信息
可以看到,在后一次查询中。因为使用了id作为主键的特点,数据库可直接定位到所需纪录。从而削减了查询工夫。
这个查询算法有一个副产物:可以发生一条用于跟尾高低页的反复纪录,也就是各页间有一条堆叠的纪录。固然,去失落他也是很轻易的。
以下是测试代码:
<?php
include "mysql_result_all.inc"; // 用于显示查询了局的任务函数
$pagesize = 9; // 每页行数
$type = 1; // =1降序分列
$mode = 0; // =1不反复上页最初一笔记录
$conn = mysql_connect(); // 毗连mysql
mysql_select_db("site"); // 选择数据库
// 筹办静态修正查询串
if($type) {
$order = "desc";
$expr = "<=";
}else {
$order = "";
$expr = ">=";
}
if($mode) $pagesize++;
mysql_query("set @v:=-1"); // 界说mysql用户变量
$rs = mysql_query("select @v:=(@v+1) as xh, id from data HAVING mod(xh,$pagesize)=0 order by id $order");
mysql_result_all($rs); // 反省各页散布
echo $pages = mysql_num_rows($rs); // 获得总页数
if($mode) $pagesize--;
// 测试分页了局,$i暗示显示页
for($i=0;$i<$pages;$i++) {
mysql_data_seek($rs,$i); // 挪动了局集指针
list($xh,$id) = mysql_fetch_row($rs); // 获得肇端id
echo "<br>[$i] $xh -- $id";
$rs1 = mysql_query("select * from data where id$expr$id order by id $order limit $pagesize");
mysql_result_all($rs1); // 显示相干了局
}
?>
mysql_result_all.inc
这个函数我贴过量次了,对换试法式十分有效的。
<?
function mysql_result_all($result,$format="") {
echo "<table $format><tr>";
for($i=0;$i<mysql_num_fields($result);$i++) {
echo "<th>".mysql_field_name($result,$i)."</th>";
}
echo "</tr>";
while($row = mysql_fetch_row($result)) {
echo "</tr>";
for($i=0;$i<mysql_num_fields($result);$i++) {
echo "<td>".$row[$i]."</td>";
}
echo "</tr>";
}
echo "</table>";
}
?>
另外要叮嘱各位的是,抵御诱惑,ASP/PHP/JSP/.NET的对比也许会让你无所适从,你也许学了一半PHP,又开始打C#的主意,或者有人说JAVA很强,这个时候的你绝对不能动摇,哪怕你真想学。 微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。 学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。 因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax 至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。 基础有没有对学习php没有太大区别,关键是兴趣。 曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线\\\\\\\'_\\\\\\\' ; 有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。 我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。 实践是检验自己会不会的真理。 本文当是我的笔记啦,遇到的问题随时填充 爱上php,他也会爱上你。 至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。 作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。 学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。 使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。 Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81 php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会) Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81 个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
页:
[1]
2