zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

复杂的orderby sql排序(按判断不同时间进行排序)

SQL排序 时间 进行 判断 不同 复杂
2023-09-27 14:27:29 时间

我现在的数据是这样的,过期时间等于0的表示无限过期时间数据,过期时间小于当前时间为已过期数据
现在有个需求,将过期的数据排最底,等于0和未过期的数据按最新的排在最前面

代码实现

$where ='';
//获取当前时间戳
$nowtime = time();
$flist = DB::fetch_all(
"select * 
from pre_common_task 
WHERE $where 
ORDER BY endtime!=0 AND endtime<$nowtime ASC, id DESC
");

解释:

endtime!=0 AND endtime<$nowtime ASC:
表示过期时间不等于0且小于当前时间的正序排序,及排到最底

id DESC:
表示其他按id倒序排序,由大到小,及最新的数据排最前

如果你觉得比较乱,也可以用下面的办法达到相同的效果

select *,(endtime!=0 AND endtime<$nowtime) as t 
from pre_common_task 
WHERE $where 
ORDER BY  t ASC,taskid DESC;

效果

在这里插入图片描述
ps:如果需求有变化,可以模拟这种方法适当变通