mysql - 按 "rep"订购帖子,但仅限 "one"天限制

标签 mysql sorting

我正在尝试让帖子按 rep 排序,但是如果 post.date 早于一天,那么它必须按正常顺序排序(意味着 id 字段顺序)。

这里是posts表(日期是unix时间戳);

id | date       | rep | title
------------------------------
10 | today      | 0   | lorem
9  | today      | 1   | ipsum
8  | yesterday  | 2   | dolor
7  | 2 days ago | 2   | sit
6  | 3 days ago | 10  | amet

预期结果(尝试获得这样的结果是不可能的还是胡说八道,或者我感到困惑);

id | title
----------
9  | ipsum
10 | lorem
8  | dolor
7  | sit
6  | amet

这是我测试过的首先返回太旧的帖子;

ORDER BY CASE WHEN
  p.date + unix_timestamp(from_unixtime(p.date) + interval 1 day)
    > unix_timestamp(now()) 
  THEN p.rep ELSE p.id
END DESC
// or
...
END DESC, p.id DESC

最佳答案

尝试:

ORDER BY 
  CASE WHEN
    p.date >= unix_timestamp(now() - interval 1 day)
      -- this part edited to worked vers
      -- THEN -p.rep ELSE NULL 
      THEN +p.rep ELSE NULL 
  END 
DESC, p.id DESC;

如果我理解正确,这应该由代表订购超过 1 天的任何东西。 -p.rep 和 DESC 应该努力将 NULL 放在第一层排序中的最后。对于日期早于一天的所有行,第一层排序将是 NULL 并出现在最后,您随后可以按照您希望的任何顺序按 p.id 进行排序。

关于mysql - 按 "rep"订购帖子,但仅限 "one"天限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32749033/

相关文章:

mysql - 在一个查询中同时使用 select 和 count 函数从表中获取数据

python - 对元组中的元素进行排序(获得最高)

php - 在 php 中使用 opendir() 按字母顺序排序和显示目录列表

swift - 从最后一项获取核心数据 ManageObject 排序

java - 将分隔文件转换为树

mysql - 如何在 MySQL 中以相反的顺序选择行?

c# - 如何使用mysql时区设置系统时区?

php - 将 base64_encode 图像从数据库恢复到文件系统

python - 从列表中删除一个对象?

javascript - Sequelize 没有使用日期创建正确的查询