case when 自定义排序时的使用
根据 case when 新的 sort字段排序
case
when t2.status = 4
and t2.expire_time>UNIX_TIMESTAMP()
and t2.expire_time<UNIX_TIMESTAMP(DATE_ADD(NOW(),INTERVAL 60 day)) then 4
when `status` = 2 then 3
when `status` = 3 then 2
when t2.status = 4
and t2.expire_time>UNIX_TIMESTAMP(DATE_ADD(NOW(),INTERVAL 60 day))
and t2.expire_time<UNIX_TIMESTAMP(DATE_ADD(NOW(),INTERVAL 1 year)) then 1
else 0
end sort
$query->orderBy('sort desc ,t2.expire_time desc,t2.created_at desc');
-
当colume 与condition 条件相等时结果为result
case colume when condition then result when condition then result when condition then result else result end
-
当满足某一条件时,执行某一result
```
case
when condition then result
when condition then result
when condition then result
else result
end
![image](//note.youdao.com/yws/res/40025/WEBRESOURCE6489287fb0198b71decf1df9891ccac4)
- 当满足某一条件时,执行某一result,把该结果赋值到new_column_name 字段中
case
when condition then result
when condition then result
when condition then result
else result
end new_column_name
```
case when 用在select 语句中,新的字段new_column_name可以用来排序,但是不能用在where中
end 后面加as new_colume_name
===================================================================
实验
建表1
CREATE TABLE `t_tab_templete_group_templete_ref` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`belong_tab_templete_id` bigint(20) DEFAULT NULL COMMENT '所属t模板Id',
`group_id` bigint(20) DEFAULT NULL COMMENT '所属group模板Id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COMMENT='tab模板和group及datagroup模板关联表'
建表2
CREATE TABLE `t_data_group_templete` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`data_group_name` varchar(255) DEFAULT NULL COMMENT 'Data Group名称',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='DataGroup模板表'
建表3
CREATE TABLE `t_group_templete` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`templete_name` varchar(128) DEFAULT NULL COMMENT '模板名称',
`group_type` tinyint(4) DEFAULT NULL COMMENT 'group模板类型1group2datagroup3spegroup',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`merchants_id` bigint(20) DEFAULT NULL COMMENT '商户id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='group模板表'
建表4
CREATE TABLE `t_spe_group` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`spe_group_name` varchar(64) DEFAULT NULL COMMENT '模板名称',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`status` tinyint(4) DEFAULT '1',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
下面是sql查询实例
SELECT
CASE R.group_type
WHEN 1 THEN G.templete_name
WHEN 2 THEN D.data_group_name
WHEN 3 THEN S.spe_group_name
END
AS group_name,R.id,R.group_type
FROM t_tab_templete_group_templete_ref R
LEFT JOIN t_group_templete G ON R.group_type =1 && R.group_id = G.id
LEFT JOIN t_data_group_templete D ON R.group_type =2 && R.group_id = D.id
LEFT JOIN t_spe_group S ON R.group_type =3 && R.group_id = S.id
若有问题欢迎大家与我互动交流,可评论,可留言,希望我们大家能一起学习,共同进步。