MySQL 如果满足条件,则按不同字段排序
MySQL Order By different field if condition is met
我有一个 table 事件,其中一些是音乐会,其中填充了时间戳列。有些是测验,因为它们是重复发生的事件,所以它们没有设置时间戳,但我将另外两列称为日期和时间。
我需要一个 select 来在 TIME(timestamp) asc
之后对这个 table 进行排序,除非是 event_type = 'quiz'
列,那么它应该按 time
列排序相反。
只需要考虑 "hour:minute" 部分,而不是日期。
我该怎么做?请参阅下面的示例 table:
title event_type timestamp day time
concert_1 music 2015-02-09 18:00:00
quiz_1 quiz 0000-00-00 00:00:00 Monday 16:30
concert_2 music 2015-02-10 19:00:00
quiz_2 quiz 0000-00-00 00:00:00 Tuesday 14:00
结果应该是:
title event_type timestamp day time
quiz_2 quiz 0000-00-00 00:00:00 Tuesday 14:00
quiz_1 quiz 0000-00-00 00:00:00 Monday 16:30
concert_1 music 2015-02-09 18:00:00
concert_2 music 2015-02-10 19:00:00
使用条件表达式 return 两者之一。
例如:
ORDER BY IF(t.event_type='quiz',t.time,TIME(t.timestamp))
MySQL IF()
函数将第一个参数计算为布尔值;如果结果为 TRUE,则 return 是第二个参数,否则 return 是第三个参数。
符合 ANSI 标准的等效项是
ORDER BY CASE WHEN t.event_type = 'quiz' THEN t.time ELSE TIME(t.timestamp) END
这假定 time
列声明为 TIME
数据类型,timestamp
列声明为 DATETIME
或 TIMESTAMP
数据类型。如果不是这种情况,那么我们希望 return 表达式 return 具有相同数据类型的规范格式,以便它们可以正确排序。
我有一个 table 事件,其中一些是音乐会,其中填充了时间戳列。有些是测验,因为它们是重复发生的事件,所以它们没有设置时间戳,但我将另外两列称为日期和时间。
我需要一个 select 来在 TIME(timestamp) asc
之后对这个 table 进行排序,除非是 event_type = 'quiz'
列,那么它应该按 time
列排序相反。
只需要考虑 "hour:minute" 部分,而不是日期。
我该怎么做?请参阅下面的示例 table:
title event_type timestamp day time
concert_1 music 2015-02-09 18:00:00
quiz_1 quiz 0000-00-00 00:00:00 Monday 16:30
concert_2 music 2015-02-10 19:00:00
quiz_2 quiz 0000-00-00 00:00:00 Tuesday 14:00
结果应该是:
title event_type timestamp day time
quiz_2 quiz 0000-00-00 00:00:00 Tuesday 14:00
quiz_1 quiz 0000-00-00 00:00:00 Monday 16:30
concert_1 music 2015-02-09 18:00:00
concert_2 music 2015-02-10 19:00:00
使用条件表达式 return 两者之一。
例如:
ORDER BY IF(t.event_type='quiz',t.time,TIME(t.timestamp))
MySQL IF()
函数将第一个参数计算为布尔值;如果结果为 TRUE,则 return 是第二个参数,否则 return 是第三个参数。
符合 ANSI 标准的等效项是
ORDER BY CASE WHEN t.event_type = 'quiz' THEN t.time ELSE TIME(t.timestamp) END
这假定 time
列声明为 TIME
数据类型,timestamp
列声明为 DATETIME
或 TIMESTAMP
数据类型。如果不是这种情况,那么我们希望 return 表达式 return 具有相同数据类型的规范格式,以便它们可以正确排序。