MySQL查询一个表,先按条件查询出一些字段排序然后其他数据再按照条件进行排序。

消息表,需要把待审核的消息置顶,置顶的待审核消息是通过一个state的状态字段和update_time字段更新时间为空则判断其为待审核数据的,将其按create_time创建时间排序,其他的消息数据直接按照创建时间排序即可,
这里待审核有两种 一种是状态为待审核但是没有更新时间 一种是状态为待审核和但是有更新时间

SQL该怎么写

SELECT *
    FROM sys_news
            WHERE state = 3 AND update_time IS NULL
            ORDER BY create_time DESC

置顶数据

    SELECT *
    FROM sys_news
            WHERE state != 3 || ( state = 3 AND update_time IS NOT NULL)
            ORDER BY create_time DESC

非置顶数据
怎么拼接成一条语句

直接select * from 表名 where state = 待审核 order by 创建时间 ;
不行?

照着下面的改一下
select * from 消息表 order by state desc, 更新时间 is NULL desc, 创建时间 desc

置顶的待审核数据 和非置顶的数据两者都要按创建时间排序 这是共同的 但是待审核有两中模式 一种带更新时间的 归为非置顶的数据 一种没有更新时间的 为置顶数据