记录一次Mysql使用in排序问题

记录一次Mysql使用in排序问题

​ 最近在跟着黑马的黑马点评做练习时学到了一个新知识,特此记录。

当我们在使用in语句进行查询时,可以查询到in后括号内的全部数据,并且数据库会进行显示,并且按照id大小进行了升序显示。
在这里插入图片描述

​ 当我们把数据颠倒一下,试着想让数据库按照我们填写数据的顺序进行显示,此时如下图发现数据库显示的顺序和in函数中填写数据的先后顺序无关,依然是按照id的大小顺序进行显示的,这种情况下 我们可以使用 order by desc来实现倒序显示。

在这里插入图片描述

此时有一个业务场景,redis中存储了一个商品的点赞记录,记录是根据不同用户的点赞先后顺序进行排列的,而此时我们需要根据从redis中获取到的用户信息来按照点赞先后顺序进行查询显示,这时order by显然是不管用的,此时我们可以使用 field 函数 进行排序,需要注意的是 field 中 的数据需要按照你想要的显示顺序进行填写

在这里插入图片描述

在Java中的使用方式为:

// 2、解析出其中的用户id
List<Long> ids = top5.stream().map(Long::valueOf).collect(Collectors.toList());
// 将集合中的数据用 , 进行分割分隔并拼接为字符串
String idStr = StrUtil.join(",", ids);
// 3、根据用户id查询用户
List<UserDTO> userDTOS = userService.query().in("id",ids)
        // 在sql最后添加sql
        .last("order by field(id,"+ idStr +")")
        .list()
        .stream()
        .map(user -> BeanUtil.copyProperties(user, UserDTO.class)).collect(Collectors.toList());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值