当前位置:   article > 正文

奇淫技巧系列-SQL语句之FIELD-自定义输出顺序_last("order by field

last("order by field

定义和用法

定义

FIELD() : 函数返回值在值列表中的索引位置。
此函数执行不区分大小写的搜索。
注意:如果在值列表中没有找到指定的值,该函数将返回0。如果值为NULL,该函数将返回0。

语法

FIELD(value, val1, val2, val3, ...)
  • 1

参数值

参数描述
value必需。要在列表中搜索的值
val1, val2, val3, …必需。要搜索的值列表

示例

在SQL语句中,IN函数并不保证输出结果的顺序,输出结果的顺序取决于查询的实现方式、表的索引以及数据分布等多个因素。因此,如果需要保证输出顺序,在查询语句中需要显式地使用ORDER BY子句来指定排序规则。但是如何实现单纯地改变输出结果的顺序呢? ORDER BY id ?
显然都不是能很好的达到我们需要结果自定义输出的目的

SELECT id,phone,password,nick_name,icon,create_time,update_time
FROM tb_user
WHERE id IN ( 5 ,2, 1)
ORDER BY id DESC
  • 1
  • 2
  • 3
  • 4

结果如下:
在这里插入图片描述

使用FIELD实现

SELECT id,phone,password,nick_name,icon,create_time,update_time
FROM tb_user
WHERE id IN ( 5 ,2, 1)
ORDER BY FIELD(id,2,5,1)
  • 1
  • 2
  • 3
  • 4

结果会按照我们在 FIELD 中定义的顺序来输出
在这里插入图片描述

业务具体使用

 // 实现点赞排行榜的前五名 (根据点赞顺序排序,先点赞排第一)
 public Result queryBlogLikes(Long id) {
        String key = BLOG_LIKED_KEY + id;
        // 1. 查询top5的点赞用户 zrange key 0 4
        Set<String> top5 = stringRedisTemplate.opsForZSet().range(key, 0, 4);
        if (top5 == null || top5.isEmpty()) {
            return Result.ok(Collections.emptyList());
        }
        // 2.解析出其中的用户id
        List<Long> ids = top5.stream().map(Long::valueOf).collect(Collectors.toList());
        String idStr = StrUtil.join(",", ids);
        // 3.根据用户id查询用户 WHERE id IN ( 5 , 1 ) ORDER BY FIELD(id, 5, 1)
        List<UserDTO> userDTOS = userService.query()
                .in("id", ids).last("ORDER BY FIELD(id," + idStr + ")").list()
                .stream()
                .map(user -> BeanUtil.copyProperties(user, UserDTO.class))
                .collect(Collectors.toList());
        // 4.返回
        return Result.ok(userDTOS);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

注意: 在mybatis-plus中 .last() 的作用是在最后一句sql语句中拼接后面的sql语句

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/557521
推荐阅读
  

闽ICP备14008679号