【问题标题】:Order by date and group by id按日期排序并按 ID 分组
【发布时间】:2014-04-18 06:21:48
【问题描述】:

我有一个events_table 格式的事件列表,我以yyyy-mm-dd 格式存储事件日期。 我需要按日期对事件进行排序:

(SELECT * from events_table ORDER BY date DESC)

但如果我在相似日期有超过 1 个事件,则排序会出错。 我想按日期和 ID 排序,以查看正确的顺序(新事件优先)。
我知道最好的做法是使用timestamp,但由于用户可以介绍一两天前的事件信息,而这种方法在我的情况下不起作用。

【问题讨论】:

  • SELECT * from events_table ORDER BY date DESC, id desc

标签: php mysql sql pdo sql-order-by


【解决方案1】:

如果您想先按日期降序,然后按 id 升序,请使用 below-

SELECT * from events_table ORDER BY date DESC, id ASC;

如果您想先按日期降序,然后按 id 降序,请使用下面-

SELECT * from events_table ORDER BY date DESC, id Desc;

如果 id 是主键并且 auto_increment 则不需要使用按日期排序,因为按 id 排序就足够了,并且会更加优化。

SELECT * from events_table ORDER BY id Desc;

【讨论】:

  • 这并不意味着事件日期会像id一样增加。对于表中的每个新条目,事件日期可能不像自动 ID 那样按升序排列。事件日期可以是 'curdate(), a 5 天后的日期, a 2 天后的日期'等,它们不在 asc 顺序中。
  • @Ravinder:你是对的,这将取决于用户的要求..根据用户要求,他在这里存储偶数日期意味着如果任何偶数会发生,那么如果 id 是 auto_increment,最新事件的 id 会更高....根据用户要求,还有其他选项。
  • @marakesh:如果您的日期列是varchar 类型并且值以dd-mm-yyyydd/mm/yyyydd.mm.yyyy 格式存储,那么此解决方案将不起作用。
  • @Ravinder 我的日期列是日期类型,日期存储在 yyyy-mm-dd 中。
  • @marakesh:很高兴您通过更新帖子进行了澄清,尽管很晚。振作起来。
【解决方案2】:

您可以按多个字段排序。

SELECT * from events_table ORDER BY date DESC, id;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-19
    • 2020-07-26
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 2011-03-08
    相关资源
    最近更新 更多