ORDER BY两列,但没有按时间排序?

时间:2013-06-26 17:59:26

标签: mysql sql date datetime sql-order-by

我之前发布过这个问题并找到了解决方案: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(亮点)活动中也是如此。

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

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

2 个答案:

答案 0 :(得分: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 Fiddle

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

答案 1 :(得分:1)

您还可以使用DATE功能删除DATETIME中的时间组件:

ORDER BY DATE(e.date), e.highlight DESC