我本来打算通过字段里面的starttime来确定用户是否禁言。那么这里希望在sql里面进行判断。于是按理成章写成下面的。
SELECT m.*,r.end_time,
CASE r.end_time
WHEN r.end_time > now() THEN '禁言一个月'
WHEN r.end_time = '2099-01-01 00:00:00' THEN '永久禁言'
ELSE '正常'
END as forbit
from member as m
left join xxx_onoff as r
on m.id = r.object_id and r.object_type = 1但是 发现这样不是很可行
主要是这里 CASE r.end_time 这里如果带上字段名 则表示用这个字段名和when后面的值进行对比 如果相等 才返回它后面的Then 所以这里when后面的一个比较 比较的结果是1或者0 也就是bit类型 那么这里就会哟问题的。
SELECT m.*,r.end_time,
CASE
WHEN r.end_time = str_to_date('2099-01-01 00:00:00', '%Y-%m-%d %H:%i:%s') THEN '永久禁言'
WHEN r.end_time > now() THEN '禁言一个月'
ELSE '正常'
END as forbit
from member as m
left join xxx_onoff as r
on m.id = r.object_id and r.object_type = 1