0

我之前发布过这个问题并找到了解决方案:ORDER BY with two columns in MySQL

这是关于排序事件。优先级应该是 TOP-PREMIUM 和 PREMIUM 事件总是在每个日期的顶部,无论如何。

解决方案是一列是 ENUM 而不是 INT。这就是他排序错误的原因。

所以现在我这样排序:ORDER BY e.date ASC, e.highlight DESC

现在我遇到了另一个新问题,因为我所有的日期都设置为时间 00:00:00,我在这里提出问题并认为一切都已解决。如果我将时间设置为 00:00 之后的某个小时,它将位于所有事件的首位。即使在 PREMIUM 和 TOP-PREMIUM (highlight) 活动中也是如此。

我可以以某种方式让 MySQL 忽略 datetime 类型列的时间,date还是有任何其他方法可以使这项工作像我想要的那样工作?

问题还在于我不能首先通过突出显示 DESC 进行排序,因为这样整个列表就不会按日期排序。

4

2 回答 2

1

您可以使用 CAST() 函数或 DATE_FORMAT 函数仅获取日期部分,因此应该可以:

ORDER BY CAST(e.date AS DATE), e.highlight DESC
ORDER BY DATE_FORMAT(e.date, '%Y-%m-%d'), e.highlight DESC

演示:SQL 小提琴

编辑:更新 sql fiddle 演示以使用 2 列,您可以看到日期的时间部分不影响排序顺序。

于 2013-06-26T18:02:05.143 回答
1

您还可以使用该DATE函数,该函数从 a 中剥离时间分量DATETIME

ORDER BY DATE(e.date), e.highlight DESC
于 2013-06-26T18:12:02.203 回答