如何按月对 PHP 中的 SQL 记录进行排序?
Posted
技术标签:
【中文标题】如何按月对 PHP 中的 SQL 记录进行排序?【英文标题】:How can I sort my SQL records in PHP by Month? 【发布时间】:2021-12-12 13:57:32 【问题描述】:我的数据库中有一个表,用于存储统计数据。结构是这样的:
---------------------------------------------
| travelTimes |
---------------------------------------------
| ID | INT(6) | *Primary key* |
| goesfrom | INT(6) | *location ID* |
| goesto | INT(6) | *location ID* |
| length | INT(6) | *time it takes* |
| time | Date | *date of the record* |
---------------------------------------------
我正在尝试在按time
列的月份分组的 php 页面上显示这些数据,并将这些数据加载到图表中(如果我有来自 3 个不同月份的记录,则应该有 3 个不同的图表)。
您认为这个问题的最佳解决方案是什么?
我尝试将表格加载到 PHP 数组(关联),并以这种方式比较日期,但据我了解,php 非常独特。所以这不起作用:
foreach($travelTimes as $travelTime)
if(date("m", strtotime($travelTime["time"])) == date("m"))
// I would sort here the current month's records
年末也有问题,因为我的尝试忽略了年份的变化。
【问题讨论】:
我认为您需要添加基于年份和月份的数据。 到目前为止您尝试过什么?你被困在哪里了?为什么不将ORDER BY
添加到您的查询中?
@NicoHaase 我看不到 ORDER BY 在哪里可以帮助我比较 PHP 中的日期
您使用的是哪个 dbms?
将行添加到$chart["2020-01"][] = $travelTime; $chart["2020-02"][] = $travelTime;
之类的关联数组中,然后遍历$chart
数组...每个项目将是属于该年月的行数组。
【参考方案1】:
您的想法不错,因此我对其进行了调整,使其每月填充一个数组及其相关的 travelTimes:
$monthlyTravelTimes = [];
foreach($travelTimes as $travelTime)
$month = date("m", strtotime($travelTime["time"]);
$monthlyTravelTimes[$month] = $travelTime;
您可以通过以下方式获取当月的旅行时间:
$monthlyTravelTimes[date('m')];
注意:这根本无法处理年份,但可以通过将 'm'
替换为 'Y-m'
轻松调整。
【讨论】:
【参考方案2】:SELECT *, MONTH(time) as timeMonth FROM travelTimes ORDER BY timeMonth
未经测试但可能有效
【讨论】:
【参考方案3】:有人添加了一个后来被删除的答案,但他的想法帮助找到了解决方案:
SELECT *, MONTH(time) as timeMonth, YEAR(time) as timeYear FROM travelTimes ORDER BY time;
有了这个,我可以简单地比较 PHP 中的字符串,例如:
if($travelTime["timeYear"] == "2021" && $travelTime["timeMonth"] == "10")
没有问题。
【讨论】:
向我道歉:/ 意外删除。添加回来以上是关于如何按月对 PHP 中的 SQL 记录进行排序?的主要内容,如果未能解决你的问题,请参考以下文章