
可以根据下面 *** 作进行编写。
1.#返回前5行 Mssql 2000分页采用top关键字(20005以上版本也支持关键字Select top 10 * from t_order where id not in (select id from t_order where id>5 )。
2.Oracle分页采用rownum关键字(三层嵌套) SELECT * FROM( SELECT A.*,ROWNUM num FROM (SELECT * FROM t_order)A WHERE ROWNUM<=15) WHERE num>=5--返回第5-15行数据。
3.采用row_number解析函数进行分页(效率更高) SELECT xx.* FROM --返回第5-15行数据 解析函数能用格式 函数over(pertion by 字段 order by 字段)。
4.Pertion 按照某个字段分区 Order 按照勒个字段排序。
<?php$mysql_server_name="localhost"
$mysql_username='root'
$mysql_password=''
$mysql_database='hp'
$conn=mysql_connect($mysql_server_name,$mysql_username,$mysql_password)
@mysql_connect("localhost","root","") or die("数据库连接失败")
@mysql_select_db("hp") or die("数据库不存在")
mysql_query("set names utf8")
$pagesize = $_GET['pagesize'] > 0 ? $_GET['pagesize'] : 10 //默认情况下每页显示10条数据
$pagenum = $_GET['pagenum'] > 0 ? $_GET['pagenum'] : 0
$query_start = $pagesize * $pagenum
if($_POST['submit']){
$strsql_add = ''
$strsql_add .=$_POST['idc'] ? " and idc='$_POST[idc]' ":""
$strsql_add .=$_POST['jiguihao'] ? " and jiguihao='$_POST[jiguihao]' ":""
$strsql_add .=$_POST['neicun'] ? " and neicun='$_POST[neicun]' ":""
$strsql_add .=$_POST['yingpan'] ? " and yingpan='$_POST[yingpan]' ":""
$strsql_add .=$_POST['xinghao'] ? " and xinghao='$_POST[xinghao]' ":""
$strsql_add .=$_POST['cpu'] ? " and cpu='$_POST[cpu]' ":""
$strsql_add .=$_POST['guishu'] ? " and guishu='$_POST[guishu]' ":""
$strsql_add .=$_POST['ip'] ? " and ip='$_POST[ip]' ":""
}
$strsql="select * from zichan where 1=1 $strsql_add limit $query_start, $pagesize"
$result=mysql_db_query($mysql_database,$strsql,$conn)
$row=mysql_fetch_row($result)
$nextpage_num = $pagenum++
$lastpage_num = ceil(count($row)/$pagesize)
echo '<font face="verdana">'
echo '<table border="1" cellpadding="1" cellspacing="2">'
// 显示字段名称
echo "</b><tr></b>"
for ($i=0 $i<mysql_num_fields($result) $i++)
{
echo '<td bgcolor="#00FF00"><b>'.
mysql_field_name($result, $i)
echo "</b></td></b>"
}
echo "</tr></b>"
// 定位到第一条记录
mysql_data_seek($result, 0)
// 循环取出记录
while ($row=mysql_fetch_row($result))
{
echo "<tr></b>"
for ($i=0 $i<mysql_num_fields($result) $i++ )
{
echo '<td bgcolor="#00FF00">'
echo $row[$i]
echo '</td>'
}
echo '<td><a href=\'xiugai.php?id='.$row[0].'\'>修改</a>'
echo '</td>'
echo '<td><a href="javascript:void(0)" onclick="if(window.confirm(\'确认删除?\')){window.location.href=\'del.php?id='.$row[0].'\'}">删除</a>'
echo '</td>'
echo "</tr></b>"
}
echo "</table></b>"
echo "</font>"
// 释放资源
mysql_free_result($result)
// 关闭连接
mysql_close($conn)
?>
html页面要增加的参数:
首页 增加 &pagenum=0 或者 不加
下一页 &pagenum= $nextpage_num
尾页 &pagenum= $lastpage_num
记得我还在念大学的时候,一位教我们单片机的老师说了一句话:"学习编程刚开始你就得照葫芦画瓢...",以前我在mysql中分页都是用的 limit 100000,20这样的方式,我相信你也是吧,但是要提高效率,让分页的代码效率更高一些,更快一些,那我们又该怎么做呢?第一部分:看一下分页的基本原理:
第一部分:看一下分页的基本原理:
mysql explain SELECT * FROM message ORDER BY id DESC LIMIT 10000, 20
***************** 1. row **************
id: 1
select_type: SIMPLE
table: message
type: index
possible_keys: NULL
key: PRIMARY
key_len: 4
ref: NULL
rows: 10020
Extra:
1 row in set (0.00 sec) 对上面的mysql语句说明:limit 10000,20的意思扫描满足条件的10020行,扔掉前面的10000行,返回最后的20行,问题就在这里,如果是limit 100000,100,需要扫描100100行,在一个高并发的应用里,每次查询需要扫描超过10W行,性能肯定大打折扣。文中还提到limit n性能是没问题的,因为只扫描n行。
第二部分:根据雅虎的几位工程师带来了一篇Efficient Pagination Using MySQL的报告内容扩展:在文中提到一种clue的做法,给翻页提供一些线索,比如还是SELECT * FROM message ORDER BY id DESC,按id降序分页,每页20条,当前是第10页,当前页条目id最大的是1020,最小的是1000,如果我们只提供上一页、下一页这样的跳转(不提供到第N页的跳转),那么在处理上一页的时候SQL语句可以是:
完整请到:http://www.ityoudao.com/Web/Mysql_606_1349.html
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)