首先是access数据库,有一个名为news的表,里面有三个字段,分别为id,classid 和name 其中id为主键,classid可以重复 现在有以下数据: id classid name 1 1 我的测试1 2 2 我的测试2 3 2 我的测试3 4 1 我的测试4 5 2 我的测试5 6 3 我的测试6 7 1 我的测试7 8 2 我的测试8 问题来了,我要实现上一篇和下一篇的效果,假设现在显示的是第5条新闻如下: 我的测试5 实现以下: 上一篇:我的测试3 下一篇:我的测试8 因为“我的测试5”的classid是2 所以要求上一篇和下一篇的classid也是2 这个很简单。你在查询的时候要查3次,第一次查询的是当前的记录,第2,3次查询的分别是上一条和下一条记录。 所以说应该是3条语句。 select * from news where id=id select top 1 * from news where id > id and classid=classid order by id asc select top 1 * from news where id < id and classid=classid order by id desc 由于ascss没存储过程,所以你可能要先把当前的记录查出来,取出这条记录的分类id,然后才能写出下面的2条查询语句。如果是sqlserver的话,我就直接在存储过程里实现这个功能。 *******************************************************************************************
C# 代码
//在页面上放2个Label 设置next1和up1 .
private void BindNewsUpNextData(int nNewsID)
{
News news = new News();
//上一篇
SqlDataReader recup1 = news.GetSingleNewsUp(nNewsID);
if (recup1.Read())
{
this.next1.Text = "下一篇:" + " <a href=shownews.aspx?newsid=" + recup1["NewsID"].ToString() + ">" + recup1["title"].ToString() + "</a>";
}
else
{
this.next1.Text = "下一篇:" + "已经没有了";
}
recup1.Close();
//下一篇
SqlDataReader recnext1 = news.GetSingleNewsNext(nNewsID);
if (recnext1.Read())
{
this.up1.Text = "上一篇:" + " <a href=shownews.aspx?newsid=" + recnext1["NewsID"].ToString() + "> " + recnext1["title"].ToString() + "</a>";
}
else
{
this.up1.Text = "上一篇:" + "已经没有了";
}
recnext1.Close();
}
SQL server 2005存储过程:
PROCEDURE [dbo].[Pr_News_Single_Next_Get]
(
@NewsID int
)
AS
SELECT
xw_News.NewsID,xw_News.title
FROM
xw_News
WHERE
NewsID=(select min(NewsID) from xw_News where NewsID>@NewsID and CategoryID=
(select CategoryID from xw_News where NewsID=@NewsID))
PROCEDURE [dbo].[Pr_News_Single_Up_Get]
( @NewsID int
)
AS
SELECT
xw_News.NewsID,xw_News.title
FROM
xw_News
WHERE
NewsID=(select max(NewsID) from xw_News where NewsID<@NewsID and CategoryID=
(select CategoryID from xw_News where NewsID=@NewsID))