• order by 多条件查询 case when


         场景:在按照条件查询后,排序按照不同的条件排序,以及同一个条件 正序和倒序排序。可以考虑使用。

          遇到的排序条件:按照直播的状态,根据条件排序。直播的状态包括:直播、置顶、预告、回放、过期预告。排序条件为:多直播按照 开始时间倒序排序,置顶按照置顶时间正序排序,预告按照离当前时间越近的倒序排序,回放按照开始时间倒序、过期预告按照离当前时间越近正序排序。

         sql语句为:

              

    SELECT 
        l.id,
        l.title,
        l.description,
        l.picture,
        l.is_dist_public,l.pre_start_time,
       l.create_time,
        (
            CASE
            WHEN l.live_status = 'NOTICE' THEN
                date_format(
                    l.pre_start_time,
                    '%Y-%m-%d %H:%i:%s'
                )
            ELSE
                date_format(
                    l.start_time,
                    '%Y-%m-%d %H:%i:%s'
                )
            END
        ) start_time,
      r.top_time,
        l.category,
        l.live_status,
        l.create_user,
        l.zm_account_id,
        l.source,
        (
            CASE
            WHEN l.live_status = 'LIVING' THEN
                1
            WHEN (
                r.is_top = 1
                AND l.live_status <> 'LIVING'
            ) THEN
                2
            WHEN l.live_status = 'NOTICE'
            AND pre_start_time >= now() THEN
                3
            WHEN l.live_status = 'NOTICE'
            AND pre_start_time < now() THEN
                5
            WHEN l.live_status = 'PLAYBACK' THEN
                4
            END
        ) AS sort,
        r.is_top
    FROM
        live l
    LEFT JOIN live_zm_account_rel r ON r.live_id = l.id
    AND l.live_status != 'PRE_LIVE'
     WHERE
        1 = 1
    AND r.is_enabled = 1
    AND r.is_delete = 0
    AND l.is_enabled = 1
    AND l.is_delete = 0
    AND r.zm_account_id = '9f7aa1cec50e4b368e69c4f5c14c3fcf'
    ORDER BY
        sort ASC, CASE WHEN sort = 1 then l.start_time   END DESC,
         
                CASE WHEN sort = 2 then  r.top_time    END DESC,
                
                CASE WHEN sort = 3 then l.pre_start_time   END ASC,
    
                CASE WHEN sort = 4 then l.start_time   END DESC,
     
                CASE WHEN sort = 5 then l.pre_start_time   END DESC
    
    LIMIT 15

        CASE when  then  注意一点:后面的排序条件就是 你最终的排序条件。

  • 相关阅读:
    监听器模式
    接口幂等性实现
    如何设计一个良好的API接口
    接口重试实现
    Spring不常用但有用的注解
    angular项目语言切换功能
    解决IOS上传竖向照片会旋转90度的问题
    微信点击链接:debugx5.qq.com提示您使用的不是x5内核
    swagger注释@API详细说明
    创建swap虚拟内存分区
  • 原文地址:https://www.cnblogs.com/thinkingandworkinghard/p/8572588.html
Copyright © 2020-2023  润新知