【问题标题】:How can I sort my SQL records in PHP by Month?如何按月对 PHP 中的 SQL 记录进行排序?
【发布时间】: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 数组...每个项目将是属于该年月的行数组。

标签: php sql date


【解决方案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"){}
      

      没有问题。

      【讨论】:

      • 向我道歉:/ 意外删除。添加回来
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-26
      相关资源
      最近更新 更多