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

时间:2022-02-05 02:44:58
我准备设计一个供求信息的表格,里边包含序号(id)(自动增量),发布日期(time),上次更新(last_time)。因为考虑到避免有人不停的重复发布信息来占据前列位置所以设置了last_time这个字段,用户发布信息时lsat_time值与time值相同,更新(记录提前)后last_time取值为当日的日期。

排序:
我想先将记录先按照last_time由大到小排序,在last_time值相同的条件下按照id值由大到小排列,以保证晚发布的信息有优先的露面的机会,请问这个sql语句应该如何写?

还有,我感觉这种算法还是有一些缺点,请问高人能不能告诉我更好的算法?

7 个解决方案

#1


order by last_time desc ,id desc

#2


我从前用过这种排序,老是感觉没有效果
此外还用过
order by last_time,id desc

order by last_time and id desc

这几种写法都没有报错,而且查询结果都不相同

不过感觉order by last_time desc,id desc只按照其中一个进行了排序而忽略了另外一个,好像在mysql手册上也见过这种写法

#3


那你这样
select * from (select * from tablename order by last_time desc) as t order by t.id desc

#4


呵呵,谢谢

#5


order   by   last_time,id   desc 这种方式last_time默认是升序的

order   by   last_time   and   id   desc 这种方式两个字段都是降序的

应该先分组,
select id,last_time from yourtablename group by last_time order by last_time desc,id desc

#6


and隔开哪个,第二个参数不起作用。

#7


last_time 很有可能是毫秒级别的不同,导致结果看上去id没有起排序作用。

#1


order by last_time desc ,id desc

#2


我从前用过这种排序,老是感觉没有效果
此外还用过
order by last_time,id desc

order by last_time and id desc

这几种写法都没有报错,而且查询结果都不相同

不过感觉order by last_time desc,id desc只按照其中一个进行了排序而忽略了另外一个,好像在mysql手册上也见过这种写法

#3


那你这样
select * from (select * from tablename order by last_time desc) as t order by t.id desc

#4


呵呵,谢谢

#5


order   by   last_time,id   desc 这种方式last_time默认是升序的

order   by   last_time   and   id   desc 这种方式两个字段都是降序的

应该先分组,
select id,last_time from yourtablename group by last_time order by last_time desc,id desc

#6


and隔开哪个,第二个参数不起作用。

#7


last_time 很有可能是毫秒级别的不同,导致结果看上去id没有起排序作用。