关于 thinkphp怎么使用mysql里的case when ... then.. 实例

实例1:
引用自:http://www.thinkphp.cn/topic/33363.html

SELECT rate,times,CASE 
WHEN times>0 && times<50 THEN 1
WHEN times>=50 && times<100 THEN 2
WHEN times>=100 && times<500 THEN 3
WHEN times>=500 && times<1000 THEN 4
ELSE 5 END AS flag
FROM game
ORDER BY flag,rate DESC

实例2:
引用自:https://blog.csdn.net/pp_fzp/article/details/77370833

sql语句使用case when实现列排序
select * from GIS_FEATURECORRECTION
 order by case correctstatus
            when '待审核' then 1
            when '待处理' then 2
            when '已完成' then 3
            else 4
          end,
          gis_featurecorrection_pkid desc;

实例3:
比较多
转载:https://blog.csdn.net/qq_33355821/article/details/86627957
case when多条件排序等强大用法

一.多条件排序
项目中有这么一个需求,标签列表展示,按照已领用的普通卡排第一位,已领用的临时卡排第二位,未领用的普通卡排第三位,未领用的临时卡排第四位,禁用的普通卡排第五位,禁用的临时卡排第六位,普通卡临时卡字段是type(0:普通开,1:临时卡),领用字段是card_status(标签状态(0:启用(已领用),1:未领用,2:禁用),下面是sql

        select * from newcloud_access_card order by 
        case  
        when card_status='0' and type ='1' then 0 
        when card_status='0' and type ='0' then 1
        when card_status='1' and type ='1' then 2
        when card_status='1' and type ='0' then 3
        when card_status='2' and type ='1' then 4
        when card_status='2' and type ='0' then 5
        end;

按照上面这种写法无论多么复杂的排序都可以实现

二.统计多条件的数据
项目中有这么一个需求,统计某个个公司的待维保,已维保,维保总数的数量,通过sum()函数与case when来实现,下面是sql

SELECT SUM(CASE WHEN status = '0' OR status = '2' THEN 1 ELSE 0 END) AS '待维保',
        SUM(CASE WHEN create_date BETWEEN  '2018-09-5 0:41:18' and '2019-07-23 23:41:18' THEN 1 ELSE 0 END) AS '维保总数',
        SUM(CASE WHEN status = '1' and update_date BETWEEN  '2018-09-5 0:41:18' and '2019-07-23 23:41:18' THEN 1 ELSE 0 END) AS '已维保'
    FROM newcloud_fire_process where type='4' and unit_id='DccBRhlrSiu9gMV7fmvizw'

三.表关联统计数据
现在我需要统计所有在系统中存在的公司的未删除的信标数量,公司没有信标的话数量为0,newcloud_company_basic_info(企业表),newcloud_beacon_point(信标表),newcloud_location_sys(系统表)

image.png

如上图所示使用case when进行统计是正确的,系统中存在7家企业,之前我将del_flag筛选条件写在下面,那么就排除掉了没有信标的企业,因为有一家企业没有信标,那么它关联到的信标表就是null,t.del_flag就不存在了,所以没有信标的那家企业就被筛选掉了,这就不是我所需要的结果。如下图:


image.png

还有种写法,我们把 关联到的信标表为null的情况也考虑进去,这时候数据也是对的,并且没有信标的那家企业为null的那条数据也显示出来了如下图:


image.png

但是这样写也有局限性,当信标表的所有数据把del_flag都变成1,那么6家企业t.del_flag=0这个条件就不满足了,只有一家没有信标的企业满足t.del_flag is null这个条件,所以只会有一条数据
image.png

综上所述还是使用case when比较好,当然也是根据需求来确定,我这里是需要不管有没有信标都要将企业的显示出来,有时候的需求可能需要没有的就不显示

四.重命名 重点

select ui.user_id,ui.user_name,
case ui.user_type
    when 'company_legal_person' then '企业法人'
    when 'gov_leader' then '政府领导'
    when 'gov_grid_worker' then '网格员'
    when 'gov' then '政府用户'
    when 'company' then '企业用户'
    when 'company_safer' then '企业安全员'
    when 'company_safe_manager' then '企业安全管理员'
    when 'company_charger' then '企业安全负责人'
    when 'gov_fulltime_worker' then '专职人员'
    else '其他' end as user_type,
ui.mobile from user_info ui
    left join login_user_relation lur on lur.user_id = ui.user_id 
    left join login_info li on li.login_id=lur.login_id
    where lur.status = '1' and ui.status = '1' and li.status='1'
    and ui.company_id = 'iksbe634ajogetpn'
image.png

我自己写的实例:
thinkphp中 field是可以这么写的 field('id','name','case ...')
废话够多了 下面是代码:

$member = M('Member')
            ->alias('a')
            ->field(array('a.id','a.name','d.url','CASE 
                    WHEN b.enterprise_id = '.$member_id.' THEN 1
                    WHEN b.enterprise_id1 = '.$member_id.' THEN 2
                    WHEN b.enterprise_id2 = '.$member_id.' THEN 3
                    ELSE 5 END AS flag'))
                    ->join('left join __PERSON_INFO__ b on a.id=b.member_id')
                    ->join('left join __WUSER__ c on c.id = a.wxuser_id')
                    ->join('left join __IMG__ d on d.id = c.headimgurl')
                    ->where($data)
            ->order('flag,a.id DESC')->limit($firstRow,$count)->select();
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容

  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 8,984评论 0 13
  • 农忙的季节,学堂的徐老师也要带着他的老婆孩子回家秋收去了,学堂就放假,而且一放就是一个月。 杨一家的地不多,只有不...
    岠山剑客阅读 305评论 0 1
  • 昨天和闺蜜谈到前任,没有前任,暗恋算不算。暗恋一个人多久算长,多久算短。一见误终身。那个人的名字已深深刻在...
    落雪小依阅读 117评论 0 1
  • 30岁生活会不会好起来,关键在于咱们20多岁时的梦想和生活方式。20多岁时的那些坚持、死磕、自律、专注和时...
    燕子ly_sioo阅读 353评论 0 1
  • 今早有个小目标,把周末听过的课,做下的笔记看一遍,深入理解加记忆。结果,坐在教室里,身边都是玩手机的人,我也炒鸡想...
    笑笑心情好阅读 153评论 0 0