mysql 上一篇_关于Mysql使用行号实现文章的上一篇,下一篇

本人是java web开发新手,最近做项目的时候遇到了一些问题,就是Mysql进行行号查询实现页面中,上一篇文章,下一篇文章的效果。

首先,在请求拥有上一篇,下一篇的页面的时候,在请求中传一个参数过来比如ID(当然也可以是表中的其他的字段,但必须是唯一的)。

请求到达,处理请求的时候,根据Url中传过来的参数,对数据库进行查询,我这里用的是id字段。

根据ID查找对应的数据,并且,将此条数据中的上一条,以及下一条一起查出来。

因为,现实中很多时候ID是不连续的,所以,我就写了下面的sql:

(SELECT * FROM tablename WHERE id<5 ORDER BY id DESC LIMIT 1)

UNION ALL

(SELECT * FROM tablename WHERE id=5)

UNION ALL

(SELECT * FROM tablename WHERE id>5 ORDER BY id ASC LIMIT 1)

查询结束,返回结果,将结果放到集合中,然后在跳转的页面使用OGNL表达式取出结果

在页面中要做判断:

1、如果集合中只有两条结果

1)集合中有最前面的两条结果

当前页面显示的内容应该是集合中第一条元素的内容,然后上一篇文章应该是不可点的,因为它是第一条数据,下一篇文章的内容,链接同进入当前页面的链接一样,只不过要将传的ID的值要改成集合中的第二个元素的id的值

2)集合中有最后面的两条结果

当前页面显示的内容应该是集合中第二条元素的内容,上一篇可以点,链接的id为第一个元素的id的值,下一篇文章不可以点,因为当前内容显示的是最后一条记录

注:看到这里也许你会疑惑,怎么判断当前的内容是不是最后两条内容,或者最后两条内容呢?别着急往下看

在处理请求的时候我们不光要返回查询到的信息,还要返回查询的当前的页面显示出来的内容这条记录在表中的哪一行,对于MYSQL来说,没有行号的概念,所以只能从sql上下手,通过临时表来返回行号,sql如下:

SELECT * FROM(SELECT @rownum:=@rownum+1 rownum, tablename.* FROM (SELECT @rownum:=0) r, tablename) AS linshi_table WHERE id=chuan_de_can_shu ORDER BY id

DESC

这条语句查询处理啊就是一条记录,rounum就是当前的行号,在页面中可进行判断,为1的时候就是第一条记录,如果为总记录数就是最后一条记录(总记录数应该很好求吧,不多说)

2、如果集合中有三条结果

有三条的结果是最容易判断的,这里就不多说了

以上内容都是个人见解,勿喷,如果有更好的方法还请各位也自己发发博客,帮助他人也是帮助自己,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值