如果是mysql的话,可以用limit,如果是sqlserver和oracle的话,要复杂一点,
站在用户的角度思考问题,与客户深入沟通,找到望江网站设计与望江网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站设计、网站建设、企业官网、英文网站、手机端网站、网站推广、主机域名、虚拟主机、企业邮箱。业务覆盖望江地区。
$pageSize = 20;//定义每页显示条数
$page = isset($_GET['page']) ? intval($_GET['page']) : 1;//取得当前页数
if ($page 1) {
$page = 1;
}
$tsql="select count(*) as count from biao order by id desc";
$result = mysql_query($tsql);
$record = mysql_fetch_array($result);
$count = $record['count'];//这里总记录数
//总页数
$pageCount = ceil($count / $pageSize);
/* 再次检查page */
if ($page $pageCount) {
$page = $pageCount;
}
//计算开始条数
$start = ($page - 1) * $pageSize;
//取得分页数据
$sql="select * from biao order by id desc limit $start, $pageSize";
下面代码没什么了,和你的一样了
再次回答你的问题。。你重复提问了
这是我以前学php写的 哈哈 你可以看看
?php
/**
* 分页类
* 1.实例化分页类,例:mypage new page("SQL语句","每页显示记录条数");
* 2.调用类中的 genpage() 方法,返回分页生成的SQL语句;
* 3.执行新生成的SQL语句;
* 4.调用 showpage_1() 或 showpage_2() 方法显示分页的翻页(可也以自定义返回显示的方式)
* 实例:
* $page = new page("select * from ly",2);
* $sql=$page-genpage();
* $ar=mysql_query($sql);
* while($nu=mysql_fetch_array($ar)){
* echo $nu[0].'br';
* }
* $page-showpage_2();
*/
class page{
private $totalnum; //总记录数
private $pagecount; //总页数
private $f_pagenum; //当前页的第一条记录
private $sql;
private $page; //当前页
private $page_size; //每页显示数量
private $pagesql;
private $total;
private $url; //当前页url
private $beforepage; //上一页
private $nextpage; //下一页
function __construct($sql,$page_size){ //传入sql语句和每页显示条数
$this-sql=$sql;
$this-page_size=$page_size;
$this-page=is_numeric($_GET[page]);
$this-page=substr($this-page,0,10);
$this-page=mysql_real_escape_string($this-page);
if(ereg("^[0-9]*[1-9][0-9]*$",$this-page)!=1){
$this-page=1;
}
if($this-page99999999){
$this-page=1;
}
}
function genpage(){
//
// if(!$this-page){
// $this-page=1;
// }
$this-pagesql = strstr($this-sqlcz," from ");
$this-pagesql = "select count(*) as ids ".$this-pagesql;
$this-total=mysql_query($this-sql);
$this-totalnum=mysql_num_rows($this-total); //总记录数
$this-pagecount=ceil($this-totalnum/$this-page_size); //总页数
$this-f_pagenum=$this-page_size*($this-page-1); //当前页的第一条记录
$this-sql .=" limit $this-f_pagenum,$this-page_size ";
return $this-sql;
}
//替换url中的page的页数
function replace_page($npage){
$this-url=$_SERVER["REQUEST_URI"]; //获取当前url
$check = strpos($this-url, 'page='); //判断url中是否有page分页参数
if($check==false){ //如果没有page分页参数
if(strpos($this-url, '?')==false){ //判断是否url是否有“ ?”号,
$this-url=$this-url."?page=1"; //如果没有“ ?”号,说明之前url没有参数
}else{
$this-url=$this-url."page=1"; //如果有“ ?”号,说明有参数,追加参数要改用符号
}
}
$npage="page=".$npage; //跳转到的页
$zz='[page=\d*]';
return preg_replace($zz,$npage,$this-url); //正则替换掉url中的page参数,实现分页
}
//显示总页数
function show_all_page(){
return $this-pagecount;
}
//显示当前页
function show_current_page(){
return $this-page;
}
//显示首页和上一页
function show_firstAndup_page(){
if($this-page==1){
return "首页|上一页";
}else{
$this-beforepage=$this-page-1;
return "a href=".$this-replace_page(1)."首页/a|a href=".$this-replace_page($this-beforepage)."上一页/a";
}
}
//显示下一页和最后页
function show_lastAnddown_page(){
if(($this-page==$this-pagecount)||($this-pagecount==0)){
return "下一页|尾页";
}else{
$this-nextpage=$this-page+1;
return "a href=".$this-replace_page($this-nextpage)."下一页/a|a href=".$this-replace_page($this-pagecount)."尾页/a";
}
}
//循环显示页数
function show_loop_page(){
$shownum =10/2;
$startpage = ($this-page$shownum)?$this-page-$shownum:1;
$endpage = ($this-page+$shownum=$this-pagecount)?$this-page+$shownum:$this-pagecount;
for($i=$startpage;$i=$endpage;$i++)
{
if($i==$this-page) {
$a= " b[".($i)."]/b ";
}else{
$a= " a href=".$this-replace_page($i)."".($i)."/a ";
}
$b=$b.$a;
}
return $b;
}
//整体显示第一种方案
function showpage_1(){
return "共".$this-show_all_page()."页nbsp"."当前第".$this-show_current_page()."页nbsp".$this-show_firstAndup_page()."nbsp"
.$this-show_loop_page()."nbsp".$this-show_lastAnddown_page();
}
//整体显示第二种方案
function showpage_2(){
return $this-show_firstAndup_page()."nbsp".$this-show_loop_page()."nbsp".$this-show_lastAnddown_page();
}
}
?
方法一:讲sql查询进行分页进行,需要调用几个函数,具体见脚本:
1.pager.class.php
?php
class pager {
public $sql; //SQL查询语句
public $datanum; //查询所有的数据总记录数
public $page_size; //每页显示记录的条数
protected $_errstr;
protected $_conn;
protected $_query_id;
public function query($query)///这个函数有问题,暂时可以不用
{
$ret = false;
if (!empty($query)) {
if ($this-_conn === false || !is_resource($this-_conn)) {
warningLog(__METHOD__ . ': query sql with no connection', true);
return false;
}
$this-_query_id = @mysql_query($query, $this-_conn);
if ($this-_query_id === false) {
$this-_errstr = @mysql_error();
$ret = false;
} else {
$this-_errstr = 'SUCCESS';
$ret = $this-_query_id;
}
}
$msg = ($ret === false) ? 'false' : strval($ret);
debugLog(__METHOD__.": [$msg] returned for sql query [$query]");
return $ret;
}
function __construct($sql,$page_size) {
$result = mysql_query($sql);
$datanum = mysql_num_rows($result);
$this-sql=$sql;
$this-datanum=$datanum;
$this-page_size=$page_size;
}
//当前页数
public function page_id() {
if($_SERVER['QUERY_STRING'] == ""){
return 1;
}elseif(substr_count($_SERVER['QUERY_STRING'],"page_id=") == 0){
return 1;
}else{
return intval(substr($_SERVER['QUERY_STRING'],8));
}
}
//剩余url值
public function url() {
if($_SERVER['QUERY_STRING'] == ""){
return "";
}elseif(substr_count($_SERVER['QUERY_STRING'],"page_id=") == 0){
return "".$_SERVER['QUERY_STRING'];
}else{
return str_replace("page_id=".$this-page_id(),"",$_SERVER['QUERY_STRING']);
}
}
//总页数
public function page_num() {
if($this-datanum == 0){
return 1;
}else{
return ceil($this-datanum/$this-page_size);
}
}
//数据库查询的偏移量
public function start() {
return ($this-page_id()-1)*$this-page_size;
}
//数据输出
public function sqlquery() {
return $this-sql." limit ".$this-start().",".$this-page_size;
}
//获取当前文件名
private function php_self() {
return $_SERVER['PHP_SELF'];
}
//上一页
private function pre_page() {
if ($this-page_id() == 1) { //页数等于1
return "a href=".$this-php_self()."?page_id=1".$this-url()."上一页/a ";
}elseif ($this-page_id() != 1) { //页数不等于1
return "a href=".$this-php_self()."?page_id=".($this-page_id()-1).$this-url()."上一页/a ";
}
}
//显示分页
private function display_page() {
$display_page = "";
if($this-page_num() = 10){ //小于10页
for ($i=1;$i=$this-page_num();$i++) //循环显示出页面
$display_page .= "a href=".$this-php_self()."?page_id=".$i.$this-url()."".$i."/a ";
return $display_page;
}elseif($this-page_num() 10){ //大于10页
if($this-page_id() = 6){
for ($i=1;$i=10;$i++) //循环显示出页面
$display_page .= "a href=".$this-php_self()."?page_id=".$i.$this-url()."".$i."/a ";
return $display_page;
}elseif(($this-page_id() 6) ($this-page_num()-$this-page_id() = 4)){
for ($i=$this-page_id()-5;$i=$this-page_id()+4;$i++) //循环显示出页面
$display_page .= "a href=".$this-php_self()."?page_id=".$i.$this-url()."".$i."/a ";
return $display_page;
}elseif(($this-page_id() 6) ($this-page_num()-$this-page_id() 4)){
for ($i=$this-page_num()-9;$i=$this-page_num();$i++) //循环显示出页面
$display_page .= "a href=".$this-php_self()."?page_id=".$i.$this-url()."".$i."/a ";
return $display_page;
}
}
}
//下一页
private function next_page() {
if ($this-page_id() $this-page_num()) { //页数小于总页数
return "a href=".$this-php_self()."?page_id=".($this-page_id()+1).$this-url()."下一页/a ";
}elseif ($this-page_id() == $this-page_num()) { //页数等于总页数
return "a href=".$this-php_self()."?page_id=".$this-page_num().$this-url()."下一页/a ";
}
}
// 设置分页信息
public function set_page_info() {
$page_info = "共".$this-datanum."条 ";
$page_info .= "a href=".$this-php_self()."?page_id=1".$this-url()."首页/a ";
$page_info .= $this-pre_page();
$page_info .= $this-display_page();
$page_info .= $this-next_page();
$page_info .= "a href=".$this-php_self()."?page_id=".$this-page_num().$this-url()."尾页/a ";
$page_info .= "第".$this-page_id()."/".$this-page_num()."页";
return $page_info;
}
}
?
2.脚本2:
?php
//类的用法
// 读取分页类
include("pager.class.php");
// 数据库连接初始化
// $db = new mysql();
$impeach_host = '10.81.43.139';
$impeach_usr = 'vmtest15';
$impeach_passwd = 'vmtest15';
$impeach_name = 'ufeature';
$impeach_con = mysql_connect($impeach_host, $impeach_usr, $impeach_passwd) or
die("Can't connect ".mysql_error());
mysql_select_db($impeach_name, $impeach_con);
// 这是一个sql查询语句,并得到查询结果
$sql = "select word from ufeature.spam_accuse_word_list where flag='0'";
// 分页初始化
$page = new pager($sql,20);
// 20是每页显示的数量
// $res_1 = mysql_query($sql) or
// die("Can't get result ".mysql_error());
$result=mysql_query($page-sqlquery());
while($info = mysql_fetch_array($result,MYSQL_ASSOC)){
// while($info = mysql_fetch_array($res_1, MYSQL_ASSOC)){
echo $info["word"]."br/";
}
// 页码索引条
echo $page-set_page_info();
?
方法二:使用ajax的方法
1、首先了解SQL语句中的limit用法
SELECT * FROM table …… limit 开始位置 , 操作条数 (其中开始位置是从0开始的)
例子
取前20条记录:SELECT * FROM table …… limit 0 , 20
从第11条开始取20条记录:SELECT * FROM table …… limit 10 , 20
LIMIT n 等价于 LIMIT 0,n。
如select * from table LIMIT 5; //返回前5行,和select * from table LIMIT 0,5一样
2、分页原理
所谓分页显示,也就是讲数据库中的结果集,一段一段显示出来
怎么分段,当前在第几段 (每页有几条,当前再第几页)
前10条记录:select * from table limit 0,10
第11至20条记录:select * from table limit 10,10
第21至30条记录:select * from table limit 20,10
分页公式:
(当前页数 - 1 )X 每页条数 , 每页条数
Select * from table limit ($Page- 1) * $PageSize, $PageSize
3、$_SERVER["REQUEST_URI"]函数
预定义服务器变量的一种,所有$_SERVER开头的都叫做预定于服务器变量。
REQUEST_URI的作用是取得当前URI,也就除域名外后面的完整的地址路径。
例子:
当前页为:;cid=22
echo $_SERVER["REQUEST_URI"]
结果为:/home.php?id=23cid=22
4、parse_url()解析URL函数
parse_url() 是讲URL解析成有固定键值的数组的函数
例子
$ua=parse_url("");
print_r($ua);
结果:
Array
(
[scheme] = http ;协议
[host] = hostname ;主机域名
[user] = username ;用户
[pass] = password ;密码
[path] = /path ;路径
[query] = arg=value ;取参数
[fragment] = anchor ;
)
5、代码实例
这个一个留言的分页,分为3个部分,一个是数据库设计,一个是连接页面,一个是显示页面。
(1)设计数据库
设计数据库名为bbs,有一个数据表为message,里面包含title,lastdate,user,content等字段,分别表示留言标题,留言日前,留言人,留言的内容
(2)连接页面
?php
$conn = @ mysql_connect("localhost", "root", "123456") or die("数据库链接错误");
mysql_select_db("bbs", $conn);
mysql_query("set names 'GBK'"); //使用GBK中文编码;
//将空格,换行转换为HTML可解析
function htmtocode($content) {
$content = str_replace("\n", "br", str_replace(" ", " ", $content)); //两个str_replace嵌套
return $content;
}
//$content=str_replace("'","‘",$content);
//htmlspecialchars();
?
(3)显示页面
?php
include("conn.php");
$pagesize=2; //设置每页显示2个记录
$url=$_SERVER["REQUEST_URI"];
$url=parse_url($url);
$url=$url[path];
$numq=mysql_query("SELECT * FROM `message`");
$num = mysql_num_rows($numq);
if($_GET){
$pageval=$_GET;
$page=($pageval-1)*$pagesize;
$page.=',';
}
if($num $pagesize){
if($pageval=1)$pageval=1;
echo "共 $num 条".
" a href=$url?page=".($pageval-1)."上一页/a a href=$url?page=".($pageval+1)."下一页/a";
}
$SQL="SELECT * FROM `message` limit $page $pagesize ";
$query=mysql_query($SQL);
while($row=mysql_fetch_array($query)){
?
table width=500 border="0" cellpadding="5" cellspacing="1" bgcolor="#add3ef"
tr bgcolor="#eff3ff"
td标题:?php echo $row[title]?/td td时间:?php echo $row[lastdate]?/td
/tr
tr bgcolor="#eff3ff"
td 用户:?php echo $row[user]?/tdtd/td
/tr
tr
td内容:?php echo htmtocode($row[content]);?/td
/tr
br
/table
?php
}
?
方法3:
script
function viewpage(p){
if(window.XMLHttpRequest){
var xmlReq = new XMLHttpRequest();
} else if(window.ActiveXObject) {
var xmlReq = new ActiveXObject('Microsoft.XMLHTTP');
}
var formData = "page="+p;
xmlReq.onreadystatechange = function(){
if(xmlReq.readyState == 4){
document.getElementByIdx_x('content2').innerHTML = xmlReq.responseText;
}
}
xmlReq.open("post", "hotel_list.php", true);
xmlReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlReq.send(formData);
return false;
}
/script
脚本2:
header("Content-Type:text/html;charset=GB2312");
$pagesize=10;
//echo $_POST['page'];
$result = mysql_query("Select count(DISTINCT hotelname) FROM ".TBL_HOTELS);
$myrow = mysql_fetch_array($result);
$numrows=$myrow[0];
$pages=intval($numrows/$pagesize);
if ($numrows%$pagesize)
$pages++;
if (isset($_POST['page'])){
$page=intval($_POST['page']);
}
else{
//设置为第一页
$page=1;
}
$first=1;
$prev=$page-1;
$next=$page+1;
$last=$pages;
//计算记录偏移量
$offset=$pagesize*($page - 1);
//读取指定记录数
$result=mysql_query("select `hotelname` , count( * ) from ".TBL_HOTELS." GROUP BY `hotelname` order by id desc limit $offset,$pagesize");
$num = mysql_num_rows($result);
while ($row = mysql_fetch_array($result,MYSQL_NUM)) {
$hotelname[] = $row[0];
$countpeople[] = $row[1];
}
for($a=0;$a$num;$a++)
{
//$result=mysql_query("select count(title) from " . TBL_Comments ." where `title`=\"".$title[$a]."\"");
//$row = mysql_fetch_row($result);
echo "TABLE style=\"MARGIN-BOTTOM: 20px\" cellSpacing=0 cellPadding=0 width=100% border=0\n";
echo "TBODY\n";
echo "TR\n";
echo "TD style=\"PADDING-TOP: 5px\" vAlign=top align=left width=80\n";
//rating_bar($title[$a],5);
echo "/TD\n";
echo "TD style=\"PADDING-TOP: 5px\" align=left width=100%A title=$hotelname[$a] style=\"FONT-SIZE: 14px\" href=#$hotelname[$a]/A\n";
echo "/TD/TR\n";
echo " TR\n";
echo "TD/TD\n";
echo "TD style=\"PADDING-LEFT: 0px\"\n";
echo "IMG src=\"images/comment.gif\" border=0 推荐人数:($countpeople[$a]) |\n";
echo "SPAN平均分:STRONG/STRONG (".$count."票) | 评论数:()/SPAN\n";
echo "/TD/TR/TBODY/TABLE\n";
}
echo "TABLE style=\"MARGIN-TOP: 30px\" cellSpacing=0 cellPadding=0 width=\"100%\"";
echo "border=0";
echo "TBODYTRTD colSpan=3 height=20";
echo "DIV align=center";
echo "P align=leftFONT color=red第".$page."页/总".$pages."页 | 总".$numrows."条/FONT | ";
if ($page1) echo "a onclick=\"viewpage(".$first.")\" href='#'首页/a | ";
if ($page1) echo "a onclick=\"viewpage(".$prev.")\" href='#'上页/a | ";
if ($page$pages) echo "a onclick=\"viewpage(".$next.")\" href='#'下页/a | ";
if ($page$pages) echo "a onclick=\"viewpage(".$last.")\" href='#'尾页/a";
echo "转到第 INPUT maxLength=3 size=3 value=1 name=goto_page 页 INPUT hideFocus onclick=\"viewpage(document.all.goto_page.value)\" type=button value=Go name=cmd_goto";
echo "/P/DIV/TD/TR/TBODY/TABLE";
看看那个limit,分页程序主要是用sql的limit实现,网上php分页类很多,就不粘了
原理是这样:
用sql语句查询后得到所有的记录条数;
根据每页显示的条数得到总共有多少页数;
通过url就是get得到当前第几页;
根据当前页数和每页显示的条数得到当前页显示的数据的起始条数start_num和结束条数end_num;
最后 select * from talbel where 条件 limit start_num,end_num;
这时得到的结果就是当前页需要显示的内容,循环输出就行了
首先你得把分页的原理弄懂,所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数:
每页多少条记录($PageSize),当前是第几页($page),现在只要再给我一个结果集,我就可以显示某段特定的结果出来。
至于其他的参数,比如:上一页($PreviousPageID)、下一页($NextPageID)、总页数($numPages)等等,都可以根据前边这几个东西得到。
以mysql数据库为例,如果要从表内截取某段内容,sql语句可以用:select * from table limit offset, rows。看看下面一组sql语句,尝试一下发现其中的规率。
前10条记录:select * from table limit 0,10
第11至20条记录:select * from table limit 10,10
第21至30条记录:select * from table limit 20,10
……
这一组sql语句其实就是当$PageSize=10的时候取表内每一页数据的sql语句,我们可以总结出这样一个模板:
select * from table limit ($CurrentPageID - 1) * $PageSize, $PageSize
拿这个模板代入对应的值和上边那一组sql语句对照一下看看是不是那么回事。搞定了最重要的如何获取数据的问题以后,剩下的就仅仅是传递参数,构造合适的sql语句然后使用php从数据库内获取数据并显示了。以下我将用具体代码加以说明。都是我自己写的,可以运行的:
?php
$db=new mysqli('localhost','root','6202','goodsmm');
$sql="select count(*) as amount from news";
$result=$db-query($sql);
//获取总数据量
$row=$result-fetch_array();
$amount=$row['amount'];
//获取当前页数
if(isset($_GET['page']))
{
$page=intval($_GET['page']);
}
else
{
$page=1;}
//每页数量
$page_size=2;
//计算总共有多少页
if($amount$PageSize)
{
$page_count=1;}
if($amount%$page_size){//拿总数据除以每页的总数,如果有余数,那么总页数等于商+1
$page_count=(int)($amount/$page_size)+1;}
else{
$page_count=(int)($amount/$page_size);}
//翻页链接
$page_string='';
if ($page==1)
$page_string='第一页|a href=ceshi.php?page='.($page+1).'下一页/a|';
elseif(($page==$page_count)||($page_count==0))
$page_string='a href=ceshi.php?page='.($page-1).'上一页/a|a href=ceshi.php?page='.$page_count.'尾页/a';
elseif(($page1)($page$page_count))
$page_string='a href=ceshi.php?page='.($page-1).'上一页/a|a href=ceshi.php?page='.($page+1).'下一页/a|';
//获取数据
$a=($page-1)*$page_size;
$b=$page_size;
$query_s="select * from news order by news_id limit $a,$b";
$result_s=$db-query($query_s);
$result_s_array=array();
while($rows=$result_s-fetch_array()){
array_push($result_s_array,$rows);
}
for($i=0;$i10;$i++){
echo $result_s_array[$i][2];
}
echo '一共有'.$page_count.'页p';
echo '当前为第'.$page.'页p';
echo $page_string;
?