仓酷云

标题: PHP网页设计php+mysql分页处置的切磋 [打印本页]

作者: 冷月葬花魂    时间: 2015-2-16 00:27
标题: 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很强,这个时候的你绝对不能动摇,哪怕你真想学。
作者: 爱飞    时间: 2015-2-16 03:16
微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox  支持的不是很好,所以能少用还是少用的好。
作者: 柔情似水    时间: 2015-2-27 20:15
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
作者: 分手快乐    时间: 2015-3-8 16:19
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
作者: 若相依    时间: 2015-3-10 11:50
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
作者: 活着的死人    时间: 2015-3-14 18:14
基础有没有对学习php没有太大区别,关键是兴趣。
作者: 因胸联盟    时间: 2015-3-17 09:02
曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线  \\\\\\\'_\\\\\\\' ;
作者: 精灵巫婆    时间: 2015-3-24 03:57
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
作者: 第二个灵魂    时间: 2015-3-25 08:52
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
作者: 冷月葬花魂    时间: 2015-3-26 23:16
实践是检验自己会不会的真理。
作者: 再见西城    时间: 2015-3-28 03:25
本文当是我的笔记啦,遇到的问题随时填充
作者: 灵魂腐蚀    时间: 2015-4-2 09:55
爱上php,他也会爱上你。
作者: 小妖女    时间: 2015-4-12 19:49
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
作者: 金色的骷髅    时间: 2015-4-17 02:29
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
作者: 变相怪杰    时间: 2015-4-29 00:01
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
作者: 深爱那片海    时间: 2015-4-30 06:34
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
作者: 蒙在股里    时间: 2015-5-6 10:12
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
作者: 莫相离    时间: 2015-5-6 19:59
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
作者: 山那边是海    时间: 2015-6-12 22:50
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
作者: 若天明    时间: 2015-7-13 23:14
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
作者: 简单生活    时间: 2015-7-18 00:14
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。




欢迎光临 仓酷云 (http://www.ckuyun.com/) Powered by Discuz! X3.2