按“rep”订购帖子,但仅限于“一天”限制

时间:2015-09-23 20:38:29

标签: 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

2 个答案:

答案 0 :(得分:1)

尝试:

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排序。

答案 1 :(得分:0)

然后做两个不同的查询呢?UNION呢?

(SELECT *
FROM POST
WHERE [YOUR CONDITION ON DATES > YESTERDAY]
ORDER BY rep DESC, id DESC)
UNION
(SELECT *
FROM POST
WHERE [YOUR CONDITION ON DATES < YESTERDAY]
ORDER BY id DESC);