mysql - mysql:如何根据其他列对列进行排序
问题描述
我有一个通知表,想按 read_at 列和 created_at 列排序。
通知表
ID | read_at | created_at |
---|---|---|
1 | 无效的 | 2021 年 6 月 21 日 12:56:12 |
2 | 无效的 | 2021 年 6 月 22 日 13:12:43 |
3 | 2021 年 6 月 24 日 19:43:42 | 2021 年 6 月 23 日 16:34:45 |
4 | 2021 年 6 月 23 日 17:00:03 | 2021 年 6 月 23 日 16:40:22 |
5 | 无效的 | 2021 年 6 月 24 日 11:41:32 |
6 | 2021 年 6 月 24 日 21:12:12 | 2021 年 6 月 24 日 19:45:22 |
7 | 2021 年 6 月 25 日 03:14:08 | 2021 年 6 月 25 日 03:12:57 |
8 | 无效的 | 2021 年 6 月 25 日 09:59:22 |
9 | 2021 年 6 月 25 日 12:41:40 | 2021 年 6 月 25 日 12:41:09 |
10 | 2021 年 6 月 26 日 01:59:59 | 2021 年 6 月 25 日 20:09:02 |
我想要的是这样的:\
sort (if read_at is null then read_at desc, created_at desc else created_at desc);
结果表应为:
ID | read_at | created_at |
---|---|---|
1 | 无效的 | 2021 年 6 月 21 日 12:56:12 |
2 | 无效的 | 2021 年 6 月 22 日 13:12:43 |
5 | 无效的 | 2021 年 6 月 24 日 11:41:32 |
8 | 无效的 | 2021 年 6 月 25 日 09:59:22 |
3 | 2021 年 6 月 25 日 19:43:42 | 2021 年 6 月 23 日 16:34:45 |
4 | 2021-06-27 17:00:03 | 2021 年 6 月 23 日 16:40:22 |
6 | 2021 年 6 月 24 日 21:12:12 | 2021 年 6 月 24 日 19:45:22 |
7 | 2021 年 6 月 29 日 03:14:08 | 2021 年 6 月 25 日 03:12:57 |
9 | 2021 年 6 月 25 日 12:41:40 | 2021 年 6 月 25 日 12:41:09 |
10 | 2021 年 6 月 26 日 01:59:59 | 2021 年 6 月 25 日 20:09:02 |
我无法很清楚地解释这一点。
我想要按 created_at 日期排序的顶部未读通知。
如果已读取通知,则其余应按 created_at 日期排序。
谢谢
解决方案
您可以按布尔表达式read_at IS NULL
降序排序,这将返回所有位于顶部的行,然后按read_at
降序(或按预期结果升序):null
created_at
ORDER BY read_at IS NULL DESC, created_at DESC -- or ASC ???
推荐阅读
- elixir - 伞形应用程序中的监督树冲突
- discord - 有可能制作一个reddit postlogger bot吗?
- aws-lambda - 在 SAM json 中将授权方添加到 api 网关
- angular - 从 Azure AD 发出 JWT 令牌中的角色
- .htaccess - htaccess 使用参数作为文件夹
- python - 使用 many=True 获取嵌套序列化程序的初始值
- amazon-web-services - 有人如何通过 describe_images 找到最新的 Ubuntu 映像?
- r - 当使用 coord_sf 指定 xlim、ylim 时,geom_sf 填充失败。在尝试使用 av 包创建动画时寻找解决方法
- javascript - 更新 mongoDB 中字段列表中的字段
- python - 图像迭代很慢