我有一个名为posts
的表格,其中有两个名为timestamp_added
和timestamp_edited
的字段。
我想通过最新添加或编辑的帖子降序排序。
ORDER BY p.timestamp_added DESC, p.timestamp_edited DESC
,没有给我我需要的东西。
我会喜欢这样的东西:
ORDER BY IF p.timestamp_edited > 0 THEN p.timestamp_edited DESC ELSE p.timestamp_added DESC
我该怎么做?我试图谷歌这个,但我很难找到我需要的东西。
答案 0 :(得分:1)
你的版本很接近。这应该做你需要的,是标准的SQL
ORDER BY
CASE WHEN p.timestamp_edited > 0
THEN p.timestamp_edited
ELSE p.timestamp_added
END DESC
答案 1 :(得分:1)
未设置时,timestamp_edited为空吗?
在这种情况下你可以这样做:
ORDER BY IFNULL(p.timestamp_edited, p.timestamp_added) DESC
如果未设置则为0:
ORDER BY IF(p.timestamp_edited > 0, p.timestamp_edited, p.timestamp_added) DESC
答案 2 :(得分:1)
AS N.B.建议,您的timestamp_edited
在创建时应与timestamp_added
相同,然后只需使用ORDER BY timestamp_edited DESC
答案 3 :(得分:0)
如果您将p.timestamp_edited
存储为00-00-00T00:00:00,您可以尝试ORDER BY GREATEST(p.timestamp_edited, p.timestamp_added) DESC
<强>更新强>
这个案例也处理null,我在数据库上检查它并完美地工作
ORDER BY GREATEST(p.timestamp_added, IFNULL(p.timestamp_edited, 0)) DESC