我之前发布过这个问题并找到了解决方案: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来订购,因为那样整个列表就不会按日期排序。
答案 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