MySQL顺序如果满足条件,则按不同字段排序

时间:2015-02-09 15:50:38

标签: mysql sql-order-by

我有一个包含事件的表,其中一些是音乐会,其中填充了时间戳列。有些是quizes,因为它们是重复发生的事件,所以它们没有时间戳设置,但是我称之为日期和时间的其他两列。

我需要选择在TIME(timestamp) asc之后订购此表,除了列event_type = 'quiz'之外,它应该由列time排序。

只有"小时:分钟"需要考虑部分,而不是当天。

我该怎么做呢?见下面的示例表:

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

1 个答案:

答案 0 :(得分:1)

使用条件表达式返回一个或另一个。

例如:

 ORDER BY IF(t.event_type='quiz',t.time,TIME(t.timestamp))

MySQL IF()函数将第一个参数计算为布尔值;如果结果为TRUE,则返回第二个参数,否则返回第三个参数。

符合ANSI标准的等效项

ORDER BY CASE WHEN t.event_type = 'quiz' THEN t.time ELSE TIME(t.timestamp) END

这假定time列声明为TIME数据类型,timestamp列声明为DATETIMETIMESTAMP数据类型。如果情况并非如此,那么我们希望以规范格式返回返回相同数据类型的表达式,以便正确排序。