我正在尝试让帖子按 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/