使用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按两个字段对结果顺序进行排序的主要内容,如果未能解决你的问题,请参考以下文章