php - 按数据库中分组日期排序

标签 php mysql sql database

您好,我遇到了与此问题类似的问题

Tricky "grouped" ordering in SQL

但似乎无法使其与日期一起使用

我的 table 有点

Car_ID   Car_Brand   Car_Model   Car_launch_date
   1     Ford        Fiesta      12-12-2011
   2     Ford        Mustang     09-04-2008
   3     Ford        Focus       10-02-2012
   4     Honda       Civic       11-05-2012
   6     Honda       Jazz        02-05-2011
   7     Toyota      Prius       11-10-2011

我希望我的结果按最接近现在的 future 日期排序,然后是最接近现在的过去日期(并按品牌分组)

我希望我的输出是这样的:

Car_ID   Car_Brand   Car_Model   Car_launch_date
   7     Toyota      Prius       11-10-2011
   1     Ford        Fiesta      12-12-2011
   3     Ford        Focus       10-02-2012
   2     Ford        Mustang     09-04-2008
   4     Honda       Civic       11-05-2012
   6     Honda       Jazz        02-05-2011

最佳答案

数据库中的日期是 DATE 对象还是字符串?因为如果您尝试将它们作为字符串排序,那是行不通的!

如果日期是DATE,请尝试:

SELECT * from my_table
ORDER BY Car_Brand DESC, 
         Car_launch_date < NOW(), 
         ABS(DATEDIFF(Car_launch_date, NOW()))

如果它们是字符串,请尝试:

SELECT * from my_table
ORDER BY Car_Brand DESC, 
         DATE(Car_launch_date) < NOW(), 
         ABS(DATEDIFF(DATE(Car_launch_date), NOW()))

当您在排序依据中指定多个列时,它将按第一列排序,如果第一列中的值相同,则按下一列排序。

此订单按 - 那么汽车品牌 - 日期是否是过去的日期。假的先排序。 (所以 future 优先),然后 - 日期的绝对差异(最小的数字在前)

注意:我放置了Car_Brand DESC(反向字母顺序),因为这就是上面的方式。

感谢 OP 发现您想要更复杂的订单。但我认为这种方式更好:)

关于php - 按数据库中分组日期排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7603998/

相关文章:

php - 刷新从 MySQL DB 填充的数据表的内容

php - MySQL JOIN 语句帮助

mysql - 我可以像这样从 select 调用 mysql SP 吗?

python - _mysql_exceptions.ProgrammingError - 如何处理?

PHP 将变量移动到另一个文档

php - Azure 上 codeigniter 应用程序的 css 文件中的字体路径显示 404?

mysql - 正确使用 MySQL 内存表以提高性能

mysql - 在 View 中添加列 - 使用 MySQL Below v8 最后匹配条件

javascript - 在 Web-SQL 中使用变量

php - 模块与 Controller