【MySQL场景题:如何保障传入id顺序与查询结果id顺序一致】---项目积累

内容:记录自己学习。


前言

今天在看一个开源项目的代码,他有一个【博客点赞排序显示的场景问题】,他牵涉到MySQL在查询的时候,自定义排序的问题,我想去记录分享一下。大家也可以看一下,感觉挺有意思的。


下面我会把具体的场景、问题,抽取出来。项目比较大,不能全部展示。


一、【点赞排序显示】场景问题叙述



⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 我们给一个【文章】点赞,它会显示你的头像,同时它会向后端,发送这篇文章的ID、当前用户的ID、当前的时间戳。(这个头像可以记住,我们这里称为A用户)
在这里插入图片描述



⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 然后我们再去登录另外一个用户B,也去点击。点赞完成之后他有一个排序的效果,但是这里就有问题,A用户第一个点赞的,他的头像应该是第一个,B用户头像应该是第二个。我们想要正确的结果应该是:A、B这样去排序,但是现在是B、A。
在这里插入图片描述



⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 这里我们看一下,从后端返回的数据。后端返回的数据就是B、A的顺序,有问题!!!
在这里插入图片描述



⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 我们继续看!!
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 我们看一下我们的Redis,id为5号在前,1号在后,没有问题!!!在这里插入图片描述



⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 再去看一下我们执行SQL日志:根据id查询用户表,先传的id为5的,也就是A用户,再去查id为1的,然后查询到2条数据,然后脱敏返回给前端渲染。
在这里插入图片描述

⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 传值传的没有问题,是先5再1,为什么查出来顺序不对呢???



二、原因分析



⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 这里直接说原因,那就是SQL语句的问题!!!这里我们用的是:where id in()
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 我们把这个SQL语句再去执行一下!!!如下:
在这里插入图片描述


⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 当我们查询用in的时候,他不会用我们里面指定的id顺序去排序返回数据的!!! 这个时候就延伸出来一个问题,那就是在in的时候,如何保障查询的顺序,是我们传递顺序呢???
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 这里可以使用:ORDER BY FIELD(字段,具体顺序),这个FIELD含义就是字段,根据指定的字段,去排序。通俗来说:你想对那个字段排序,具体的顺序就是你传的顺序。如下图:
在这里插入图片描述



⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ OK,这个时候,去修改一下,原有的SQL语句。
在这里插入图片描述



⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 重启服务器,刷新,OK,完美!!!

在这里插入图片描述



OK,到这里就讲完了!!!



⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 上面是结合特定的场景去解决这个问题的,来去具体说这个SQL的用法,当然还存在其他的解决方案。



总结

⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 文章结合自己看别人的开源项目,总结的,如有不正确的地方,多多指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值