php 上一篇,下一篇文章实现代码与原理说明
程序员文章站
2022-12-26 23:40:28
实现原理: 就是对id对进行order by id desc 或 order by id asc进行排序,然后再判断比当前id> or小于当前文章id的相同栏目的文章...
实现原理:
就是对id对进行order by id desc 或 order by id asc进行排序,然后再判断比当前id> or小于当前文章id的相同栏目的文章。
实例的sql语句如下:
$id就是当面文章的id
select * from news where id<$id order by id desc limit 0,1
select * from news where id>$id order by id desc limit 0,1
--
-- 表的结构 `string_find`
--
create table if not exists `string_find` (
`id` int(4) not null auto_increment,
`charlist` varchar(100) default null,
primary key (`id`)
) engine=myisam default charset=utf8 auto_increment=7 ;
--
-- 导出表中的数据 `string_find`
--
insert into `string_find` (`id`, `charlist`) values
(1, ''),
(2, 'baidu'),
(5, 'www.baidu.com'),
(6, 'www.jb51.net');
好了万事俱备了,下面来看一下操作方法
mysql_connect('localhost','root','root') or die(mysql_error());
mysql_select_db('cc');
mysql_query("set names 'gbk'");
$cid =5;//是你当前文章的编号
$sql ="select * from string_find where id>$cid order by id desc limit 0,1"; //上一篇文章
$sql1 ="select * from string_find where id<$cid order by id asc limit 0,1";//下一篇文章
$result = mysql_query( $sql );
if( mysql_num_rows( $result ) )
{
$rs = mysql_fetch_array( $result );
echo "上一篇".$rs[0];
}
else
{
echo "没有了";
}
$result1 = mysql_query( $sql1 );
if( mysql_num_rows( $result1 ) )
{
$rs1 = mysql_fetch_array( $result1 );
echo "下一篇".$rs1[0];
}
else
{
echo "没有了";
}
以下是别的网友写的文章。
由于我希望访客在浏览网页的时候需要看到上一主题,下一主题的标题,所以必定是要在数据库中查询出来的了,可以通过limit限制来取,比如,我的博客是按照id自动增量的,那么可以通过查找大于或者小于当前id来取
$upsql="select * from `blog` where `id`<$id order by `id` desc limit 0,1";
$downsql="select `id`,`title` from `blog` where `id`> $id order by `id` asc limit 0,1";
再通过查询,取出数据
如果只是单一的"上一篇","下一篇"那么就没有必要查询了,这样是不必查询了,但也许用户点击之后会看到,这已经是首页了或者这已经是末页了,呵呵
switch($act) {
case "up":
$sql="select * from `blog` where `id`< $id order by `id` desc limit 0,1";
break;
case 'down':
$sql="select * from `blog` where `id`> $id order by `id` asc limit 0,1";
break;
default :
$sql="select * from `blog` where `id`= $id limit 0,1";
break;
}
通过传递一个动作来实现上一主题,下一主题
就是对id对进行order by id desc 或 order by id asc进行排序,然后再判断比当前id> or小于当前文章id的相同栏目的文章。
实例的sql语句如下:
$id就是当面文章的id
select * from news where id<$id order by id desc limit 0,1
select * from news where id>$id order by id desc limit 0,1
--
-- 表的结构 `string_find`
--
create table if not exists `string_find` (
`id` int(4) not null auto_increment,
`charlist` varchar(100) default null,
primary key (`id`)
) engine=myisam default charset=utf8 auto_increment=7 ;
--
-- 导出表中的数据 `string_find`
--
insert into `string_find` (`id`, `charlist`) values
(1, ''),
(2, 'baidu'),
(5, 'www.baidu.com'),
(6, 'www.jb51.net');
好了万事俱备了,下面来看一下操作方法
复制代码 代码如下:
mysql_connect('localhost','root','root') or die(mysql_error());
mysql_select_db('cc');
mysql_query("set names 'gbk'");
$cid =5;//是你当前文章的编号
$sql ="select * from string_find where id>$cid order by id desc limit 0,1"; //上一篇文章
$sql1 ="select * from string_find where id<$cid order by id asc limit 0,1";//下一篇文章
$result = mysql_query( $sql );
if( mysql_num_rows( $result ) )
{
$rs = mysql_fetch_array( $result );
echo "上一篇".$rs[0];
}
else
{
echo "没有了";
}
$result1 = mysql_query( $sql1 );
if( mysql_num_rows( $result1 ) )
{
$rs1 = mysql_fetch_array( $result1 );
echo "下一篇".$rs1[0];
}
else
{
echo "没有了";
}
以下是别的网友写的文章。
由于我希望访客在浏览网页的时候需要看到上一主题,下一主题的标题,所以必定是要在数据库中查询出来的了,可以通过limit限制来取,比如,我的博客是按照id自动增量的,那么可以通过查找大于或者小于当前id来取
$upsql="select * from `blog` where `id`<$id order by `id` desc limit 0,1";
$downsql="select `id`,`title` from `blog` where `id`> $id order by `id` asc limit 0,1";
再通过查询,取出数据
如果只是单一的"上一篇","下一篇"那么就没有必要查询了,这样是不必查询了,但也许用户点击之后会看到,这已经是首页了或者这已经是末页了,呵呵
复制代码 代码如下:
switch($act) {
case "up":
$sql="select * from `blog` where `id`< $id order by `id` desc limit 0,1";
break;
case 'down':
$sql="select * from `blog` where `id`> $id order by `id` asc limit 0,1";
break;
default :
$sql="select * from `blog` where `id`= $id limit 0,1";
break;
}
通过传递一个动作来实现上一主题,下一主题
上一篇: 让PHP支持页面回退的两种方法[转]