【问题标题】:Php MySql sort custom order by hoursPHP MySql 按小时排序自定义顺序
【发布时间】:2013-08-27 22:44:15
【问题描述】:

我有一个 mysql 表,其中包含 3 列文本格式的“事件”、格式 YYYY-MM-DD 的“日期”和格式 HH:MM 的“小时”。例如:

Event1  2013-08-20  18:30
Event2  2013-08-20  19:30
Event3  2013-08-20  20:00
Event4  2013-08-20  00:00
Event5  2013-08-20  02:30
Event6  2013-08-20  14:50
Event7  2013-08-20  00:30

数据库包含一天中的不同日期和不同小时。 我必须先按天排序所有事件,然后按小时排序,但小时顺序必须像这个例子:

Event6  2013-08-20  14:50
Event1  2013-08-20  18:30
Event2  2013-08-20  19:30
Event3  2013-08-20  20:00
Event4  2013-08-20  00:00
Event7  2013-08-20  00:30
Event5  2013-08-20  02:30

时间 00:00, 01:00, 02:00... 通常是在开始,但我需要更改顺序。小时 00:00, 01:00, 02:00... 应该出现在最后,就像您在上一个示例中看到的那样。

我的句子是:

SELECT * FROM Events ORDER BY Date, Hour

但这句话不适合我,因为它让我恢复了这个价值观:

Event4  2013-08-20  00:00
Event7  2013-08-20  00:30
Event5  2013-08-20  02:30
Event6  2013-08-20  14:50
Event1  2013-08-20  18:30
Event2  2013-08-20  19:30
Event3  2013-08-20  20:00

MySql 或 PHP 中的哪个句子需要我显示我想要的结果?

谢谢大家 ;)

【问题讨论】:

    标签: php mysql sql date datetime


    【解决方案1】:

    您可以在ORDER BY中使用MySQL函数TIME_TO_SEC()IF语句。

    假设05:00下面的所有内容都应该在最后:

    SELECT
       *
    FROM
       `Events`
    ORDER BY
      `Date` ASC,
      IF(TIME_TO_SEC(`Hour`) < TIME_TO_SEC('05:00'), 1, 0) ASC,
      `Hour` ASC
    

    Example of SQLFIDDLE.

    【讨论】:

    • 我已将这些记录放入数据库表中,并对其进行了测试,并且可以正常工作。您可以粘贴表和记录的 sql 转储,以便我可以在您的数据上对其进行测试吗? +我已经用 sqlfiddle 示例更新了答案
    • 我了解到您有日期字段的 DATE 字段类型和小时的 TIME 字段类型?但是,您的数据仍然对我有用(但 DATE 排序不起作用)...sqlfiddle.com/#!2/77abc/1 你能把你不工作的例子放在sqlfiddle.com 上吗?
    • 因为您是按字符串'Hora' 排序,而不是字段`Hora`。您的固定 sql 语句 > sqlfiddle.com/#!2/c201a/6 。并将 Hora 字段类型更改为 TIME 而不是 VARCHAR...
    • 耶!你是最棒的!我使用 Hora (varchar) 和你的句子 IF(TIME_TO_SEC(Hour) Hour ASC。我错了`'。 1000 谢谢!
    • 它适用于VARCHAR,但TIME字段类型更正确;我认为正确的字段类型会带来更好的性能。但如您所愿;)如果这是您的正确答案,please accept it。我很高兴能提供帮助。
    【解决方案2】:

    你试过了吗

    SELECT * FROM Events ORDER BY Date, time(Hour)
    

    【讨论】:

    • 这个解决方案不行,结果是一样的。 Hour 的列在 String...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    相关资源
    最近更新 更多