MySQL-当MySQL的表无数字型主键时,如何查找上一篇和下一篇?

项目合作 项目合作 主题:1030 回复:2135

MySQL-当MySQL的表无数字型主键时,如何查找上一篇和下一篇?

瑾兮 发布于 2017-04-02 字数 315 浏览 992 回复 6

继上个问题是一SQL查找出"上一篇"和"下一篇",好像也没有什么好的方法,这次我们有一个表是没有数字主键的,主键是一个随机数生成的md5()值,现在需要查找上一篇和下一篇,请问如何才能查出当前文章的上一篇和下一篇呢?有什么比较高效的方法吗?(前提是不能改表结构,因为已经有应用在使用了,而且还有许多外在接口和这个表有关系)

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(6

灵芸 2017-09-23 6 楼

可以新建一张关系表,就两列,一个自增id,一个原表的主键值,
这样上一篇和下一篇就能有序号对应,然后维护这两个表
应该能满足你的要求

虐人心 2017-06-26 5 楼

这让我想起了mongo,我们在mongo里面是用另一个集合来对应的,其实你可以增加一个字段,设置唯一索引,来记录你的id,这可比维护两张表感觉可能会好一点

浮生未歇 2017-06-25 4 楼

你可以把输出的结果做成数组。

然后用标题确定数组的key

用key来判断下一篇上一篇,

最后判断第一篇,和最后一篇,key值的大小

比如
$array = array(
[0]=>array(
'title'="test1"
),
[1]=array(
'title'="test2"

),
[3]=array(
'title'="test3"

)

);

获取当前key

用key作为上下篇顺序ID

最后判断当前key,是否是大于最后一个key,是否等于第一个key

清晨说ぺ晚安 2017-04-19 3 楼

或者你可以使用笨办法,建新表:

Current (varchar) - md5
PrevPost (varchar) - md5
NextPost (varchar) - md5

SELECT PrevPost, NextPost FROM Ref_PostLink WHERE Current='MD5 VALUE'

需要针对你的实际使用,处理一下每一个Post对应md5的唯一性,
这样不需修改原表~,只需生成一次新表 Ref_PostLink 的内容,在增、删、改的时候记得去更新该表内容就行了。

浮生未歇 2017-04-16 2 楼

1.可以按照sql条件查询出对应的一个小数据列表,比如符合要求的文章50条。
2。再按照一定顺序排列,比如发布时间,并将对应的md5主键放到一个有序的对象内
比如list.放到memecache缓存内。
3.当查询数据时,记录当前读到第几条。再从缓存读。直到读完为止,清掉缓存,再从数据库查询最后一条时间以后得数据

灵芸 2017-04-14 1 楼

其实上一篇和下一篇就等于翻页,只不过每页都是一条记录。从你的问题中看不到有什么特殊的要求,所以你可以按照翻页的情况实现这个逻辑。