使用mysql按两个字段对结果顺序进行排序

Posted

技术标签:

【中文标题】使用mysql按两个字段对结果顺序进行排序【英文标题】:sort result order by two fields using mysql 【发布时间】:2013-09-24 11:07:42 【问题描述】:

现在我正在尝试从我的数据库中获取主题。

topics (
  `replied_at` int(11) unsigned DEFAULT NULL,
  `created_at` int(11) unsigned DEFAULT NULL,
)

我想按较大的resolved_at 或created_at 对主题进行排序。因为我想获得最新创建或回复的主题。

例如:

topic1:
replied_at: NULL
created_at: 1111

topic2:
replied_at: 2222
created_at: 0001

topic3:
replied_at: 3333
created_at: 1111

结果是:

主题3 主题2 主题1

mysql order by 支持这个查询吗?

谢谢:)

编辑:

我使用了这个查询,但我的顺序有误):

SELECT * FROM topic ORDER BY GREATEST(replied_at, created_at) desc limit 3\G;

【问题讨论】:

【参考方案1】:
select * from `topics`
         order by greatest(coalesce(`replied_at`,0),coalesce(`created_at`,0)) desc;

或者,假设replied_at 总是大于created_at

select * from `topics`
         order by coalesce(`replied_at`,`created_at`,0) desc;

【讨论】:

假设 reply_at 总是比 created_at 大!!好主意 :) 谢谢 但是如果我使用这个查询,我该如何添加索引?我应该为这种排序创建一个新字段(latest_update)吗?【参考方案2】:

使用GREATEST()

order by greatest(ifnull(replied_at,0), ifnull(created_at,0)) desc

【讨论】:

以上是关于使用mysql按两个字段对结果顺序进行排序的主要内容,如果未能解决你的问题,请参考以下文章

按html表单输入顺序对foreach结果进行排序

mysql学习-explain中的extra

mysql排序数据

sql - 如何使用其他字段作为排序顺序进行排序?

Mysql中ORDER BY 排序怎么使用?指定顺序和多字段排列

django中的过滤顺序