微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySQL:先按特定项目排序,然后按时间排序

如何解决MySQL:先按特定项目排序,然后按时间排序

让我们说我们有一张桌子

names
-------------------
id     name      created_at
1      alpha     2020-10-23 17:30:35
2      beta      2020-10-24 17:30:35
3      gamma     2020-10-25 17:30:35
4      kilo      2020-10-26 17:30:35
5      charlie   2020-10-27 17:30:35
6      hector    2020-10-28 17:30:35

我想按固定数组对前几行进行排序,假设6,3,2并按created_at进行降序排列。 因此,我期望的顺序为6,2,5,4,1

如何使用MysqL实现此目标?

我尝试使用field(),但无法使其与另一列配合工作。

解决方法

FIELD()有点棘手,因为如果没有匹配项,它将返回0。您可以构造一个满足您需要的表达式:

order by coalesce(nullif(field(id,6,3,2),0),999999),created_at desc

如果您知道ID始终是固定值的降序,则可以使用:

order by (case when id in (6,2) then id end) desc,created_at desc
,
SELECT * FROM names ORDER BY (
CASE
    WHEN id = 6 THEN 1
    WHEN id = 3 THEN 2
    WHEN id = 2 THEN 3
    ELSE 4
END,created_at DESC
)

CASE语句确保列出的前3个项目分别是6、3和2,其余按created_at DESC顺序列出。

,

一种选择是编写一个case表达式,如下所示

  select *
    from names
order by case when id in (6,2) then 0
              else 1
          end asc,created_at desc

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。