关于MySQL ORDER BY的问题

时间:2011-09-15 08:41:35

标签: mysql

我有一个名为posts的表格,其中有两个名为timestamp_addedtimestamp_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

我该怎么做?我试图谷歌这个,但我很难找到我需要的东西。

4 个答案:

答案 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