MySQL中case when的用法:
select f1,case [f2]
when expression1 then value1
when expression2 then value2
else value3
end alias_field
from table;
相当于代码中的:
if(expression1 ){
alias_field = value1;
}elseif(expression2 ){
alias_field = value2;
}else{
alias_field = value3;
}
case [f2] 表示f2这个字段是可选的,expression是一个条件表达式或常量,value是一个值,在expression和value中都可以使用字段的值进行判断或运算;
比如一个活动数据表,每个活动都有开始时间和结束时间,在展示时要求将正在进行中的活动排在前面,未开始的排在中间,已结束的排在最后
活动表:activity
id 主键
activity_name 活动名称
start_time 活动开始时间
end_time 活动结束时间
按如上排序规则查询活动数据:
select id,activity_name,
case
when end_time < unix_timestamp(now()) then -1 /*已结束*/
when start_time < unix_timestamp(now()) and end_time > unix_timestamp(now()) then 1 /*进行中*/
else 0 /*未开始*/
end order_number
from activity order by order_number desc limit 1,10;