(根据创建时间和更改时间)查询排序问题

直接上代码:

<select id="selectSysEssayList" parameterType="SysEssay" resultMap="SysEssayResult">
        <include refid="selectSysEssayVo"/>
        <where>  
            <if test="title != null  and title != ''"> and title like concat('%', #{title}, '%')</if>
            <if test="imgPath != null  and imgPath != ''"> and img_path = #{imgPath}</if>
            <if test="essayColumn != null  and essayColumn != ''"> and essay_column = #{essayColumn}</if>
            <if test="createUser != null  and createUser != ''"> and create_user = #{createUser}</if>
            <if test="essayStatus != null "> and essay_status = #{essayStatus}</if>
             and essay_status != 1
        </where>
        order by COALESCE ( updated_at , created_at ) desc
    </select>

注意倒数第二行:

 order by COALESCE ( updated_at , created_at ) desc

这里使用了coalesce(中文名:合并;讲解:函数需要许多参数,并返回第一个非NULL参数。如果所有参数都为NULL,则COALESCE函数返回NULL。)他是mysql中自带的属性,单讲有点过于平面!上代码:

SELECT COALESCE(NULL, 0)

返回值应该是:0利用他的这个特点,结合数据修改特性来判断:数据修改肯定时在创建之后!所以一条数据的修改时间一定在创建时间之后(这是一句废话,听懂的人在上句就应该听懂了,没听懂的继续听我讲!!)现在关键来了

 COALESCE ( updated_at , created_at )

注意看update_at和create_at的前后顺序!

这里顺序不能乱,根据coalesce的属性介绍(函数需要许多参数,并返回第一个非NULL参数。如果所有参数都为NULL,则COALESCE函数返回NULL。)他会返回第一个不为空的参数,在进行排序是咱们是要拿出这条数据最大时间来进行比较,很明显修改时间一定比创建时间大!应该拿update_at来比较。

有的彦祖该问了:‘如果没有改过呢?’

那他就是null去第二个值create_at,然后与其他数据进行排序

有的彦祖又该问了:‘如果没有创建时间呢?’

那就两个值都是null,在排序时会按照null进行排

在这里插入图片描述

全部评论

相关推荐

2024-12-02 22:30
西安理工大学 Java
M_bao:简历排版换一下吧,第二个项目换了吧,咱门双非学历本来就不行还用这种项目太掉分了,300沟通一个要简历你打招呼也有问题。
点赞 评论 收藏
分享
lllll1234:xd,从你接受offer到offer发送到邮件隔了多久呢
点赞 评论 收藏
分享
联洲 嵌入式软件开发 总包48w(sp+3档)
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务