mysql多个相同类型字段排序问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql多个相同类型字段排序问题相关的知识,希望对你有一定的参考价值。

我想按时间排序得到5条结果,不是先排这个,再排另一个,而是综合三个字段的时间来排序
就是论坛帖子排序问题,帖子发布时间先后正常排序情况下,优先将最新的更新或回复靠前排,更新的或回复的又要再优先排序

参考技术A 用order by 字段名 asc/desc 升序或降序排列
这个字段名可以是多个,如:
首先按回复时间进行排序,然后回复时间相同的再按发布时间进行排序
select * from 表名 where 条件 order by 回复时间字段名 desc(降序),发布时间 desc ,更新时间 desc
是否是你想要结果呢?追问

不是,你那样排序结果就是先排回复时间,在排发布时间,最后排更新时间,我要综合这三种时间一起排序

参考技术B SELECT *,GREATEST(updatetime,lastpost,createtime) as f FROM `表` WHERE 'condition' order by f desc本回答被提问者采纳 参考技术C SELECT *, ifnull(if(updatetime>lastpost,updatetime,lastpost),createtime) as f FROM `表` WHERE 1 order by f desc

不知道是不是这个意思?追问

嗯 但是最后一行为0 哪里错了

追答

哦,这样:
select * , greatest( createtime, updatetime, lastpost ) as f from `test` order by f desc

参考技术D 怎么总和三个字段,拼起来排序吗

mysql order by 多个字段

下图是只加了一个排序的结果:

技术分享

可以看到,单一字段是没问题的。如果加入c2呢?下图是c2

技术分享

可以发现,这里的orderby是先按c1增序,然后对于按c1排好序以后的相同的元素,又根据c2做了降序排序。下面 是c1,c2都增序,结果符合。

技术分享

总结就是,orderby多个字段时,用逗号分隔每一个字段,如果字段不指明排序方式,默认是增序。排序的方法是先按第一个字段排序,如果有相同的再按后续的字段依次排序。

以上是关于mysql多个相同类型字段排序问题的主要内容,如果未能解决你的问题,请参考以下文章

mysql order by怎样多个时间字段排序

如何让mysql按照两个或多个字段排序

mysql数据库怎么可以两个条件排序?

mysql order by多个字段

MySQL排序字段数据相同不能分页问题

MySQL排序字段数据相同不能分页问题