文章帖子置顶功能查询语句CASE WHEN THEN END

421次阅读
没有评论

共计 1092 个字符,预计需要花费 3 分钟才能阅读完成。

文章帖子置顶功能查询语句 CASE WHEN THEN END

对于置顶开发需求,网上看到有些人说写个访问判断语句,当有访问时候,检测置顶 ID 的时间戳是否大于文章 ID 最大(也就是最新一条文章)的时间戳,如果小的话,就直接修改置顶数据的时间戳。

这个办法吧,能实现,但是确实太低级粗暴了,很不实用,在介绍功能之前,今天来熟悉一个 SQL 的语句:

CASE WHEN THEN END

这个有两种玩法

1. 简单 CASE WHEN 函数:

CASE SEX WHEN '1' THEN '男' WHEN '0'  THEN '女' ELSE '未知' END

2.CASE WHEN 条件表达式函数实现:

CASE WHEN SEX ='1'  THEN '男'  WHEN SEX ='0'  THEN '女'  ELSE '未知' END

注意:这两种方式,可以实现相同的功能。简单 CASE 函数的书写方法相对比较简介,但是和 CASE 搜索函数相比,功能方面会有些限制。

举个栗子

如下场景,给出了一些国家以及对应的人口数据。我们根据这些国家的人口数据,统计亚洲和北美洲的人口数量。

国家(country) 人口(population)
中国 600
美国 100
加拿大 100
英国 200
法国 300
日本 250
德国 200
墨西哥 50
印度 250

方法 A:

SELECT  SUM(population),
CASE country
WHEN '中国'     THEN '亚洲'
WHEN '印度'     THEN '亚洲'
WHEN '日本'     THEN '亚洲'
WHEN '美国'     THEN '北美洲'
WHEN '加拿大'  THEN '北美洲'
WHEN '墨西哥'  THEN '北美洲'
ELSE '其他' END
FROM    TABLE
GROUP BY CASE country
WHEN '中国'     THEN '亚洲'
WHEN '印度'     THEN '亚洲'
WHEN '日本'     THEN '亚洲'
WHEN '美国'     THEN '北美洲'
WHEN '加拿大'  THEN '北美洲'
WHEN '墨西哥'  THEN '北美洲'
ELSE '其他' END;

方法 B:

SELECT sum(population) AS population,
  (CASE
    WHEN country IN ('中国','日本','印度')THEN '亚洲'
    WHEN country IN ('加拿大','美国','墨西哥') THEN  '北美洲'
    else '其他' end) AS area
FROM cptable GROUP BY area;

再说置顶功能

语句内容如下:

CASE WHEN ishot = 1 THEN 1 ELSE 0 END DESC

当 ishot 字段为 1 时候,设置排序值为 1,否则为 0,然后按照倒序排序即可。

在 laravel 框架中可以这么使用:

$data->orderByRaw(DB::raw("CASE WHEN ishot = 1 THEN 1 ELSE 0 END DESC"));

正文完
加入官方交流QQ群:778957856
post-qrcode
 0
clark
版权声明:本站原创文章,由 clark 2023-01-02发表,共计1092字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)