1
picasso250 2014-04-12 16:13:13 +08:00
select ifnull(col,now()) as col_ from t order by col_
这样可以吗? |
2
picasso250 2014-04-12 16:21:42 +08:00
实测
SELECT ifnull(time_, UNIX_TIMESTAMP(now())) as _time_ FROM test.t order by _time_ 顺便吐槽一句,为什么要用int存时间而不是用timestamp呢? http://stackoverflow.com/questions/7029127/using-mysqls-timestamp-vs-storing-timestamps-directly |
3
towser 2014-04-12 16:38:31 +08:00
看需求。timestamp每次update时会自动更新。
int datetime timestamp的性能对比: myisam http://gpshumano.blogs.dri.pt/2009/07/06/mysql-datetime-vs-timestamp-vs-int-performance-and-benchmarking-with-myisam/ innodb http://gpshumano.blogs.dri.pt/2009/07/06/mysql-datetime-vs-timestamp-vs-int-performance-and-benchmarking-with-innodb/ |
4
hellohacker OP 我想知道的是怎么排序 而并非是性能问题
|
5
towser 2014-04-12 17:49:23 +08:00
|
6
picasso250 2014-04-13 12:43:59 +08:00
@towser timestamp每次update时不一定会自动更新。
CURRENT TIMESTAMP ON UPDATE |
7
towser 2014-04-13 13:53:46 +08:00
@picasso250 当然指默认情况下。
|
8
davansy 2014-04-13 14:25:25 +08:00
按照楼主表数据类型的设计,想直接得出按照 “大于现在的时间->结束时间不确定的->已结束的” 排序方式的结果基本不可能(注意是直接得出。) 因为不论怎么样给“结束时间段”赋值 都不好找一个介于现在时间 和 已结束时间的值。mysql 在处理NULL 是会有额外的开销,在楼主的请求了,会把NULL 转化成类似int 0 的方式去处理,所以在这里结束时间不确定的 一定是排在最后面或者最前面。
要实现楼主的方式: 查询大于现在时间和已结束的,再查询结束时间不确定的。然后在业务逻辑里面做对应的排序插入。 另外,楼主的query 对应的数据量比较大的话,会做对"结束时间"的索引吧,做索引尽量避开值为NULL 比较多的列,NULL 在索引中会增加额外的处理开销。换句话说就是会影响性能。 |