记录一次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());