排序012将1排在最前面

排序012将1排在最前面

这个是项目中遇到的一个排序问题,要求将正在进行中的排序到最前,从思路上讲,可以在mysql中处理,可以在后端语言中,那到数据后处理,也可以到前端来处理。

或者说将特定条件的数据置顶。

资料

https://blog.csdn.net/qq_27544423/article/details/94383958

Union来处理

需要写三遍sql(好像效果不好,之前同事遇到过)

select字段

增加额外字段,然后在order by的时候用上。还不如直接Order by 效果更好。

order by

关键代码如下:

ORDER BY (case when status=1 then 1 else 2 end),status desc

举例

SELECT  * from  yc_adverts ORDER BY (case when adstatus=1 then 0 else 2 end ) ,id desc;

满足特定条件

SELECT * FROM `w_user_contacts` WHERE `uid` = 76042197140504576
ORDER BY
CASE
            WHEN phone = 18141901322 THEN 1
            WHEN phone = 17695561638 THEN 1
ELSE
        phone
END

直接用等式

SELECT * from yc_adverts ORDER BY adstatus=1 desc ;

FIELD

// 纯数字字段不用处理引号,比较好拼接
SELECT * from yc_adverts ORDER BY FIELD(`adstatus`,1,2,0)
// 一个引号全包住,搞定字符值字段
SELECT * from yc_adverts ORDER BY FIND_IN_SET(`post_title`,'A,B,C,D,E'); 

-- 注意:第一个参数不能是字符串,否则不起作用

备注:最近看公司的代码,发现也用到了field,还以为是新知识,没有想到已经记录过了。2021-11-28 17:04