【问题标题】:How to group data into weeks starting Monday to Sunday如何将数据分组为从周一到周日开始的周
【发布时间】:2015-03-06 19:37:24
【问题描述】:

我正在显示我的 mySQL 表中的一些数据库用户统计信息。我想按周对数据进行分组,这样我就可以从周一到周日每周都有单独的表格。数据库中的日期存储为 YYYY-MM-DD。

目前我有以下 PHP 来访问数据:

try {
        $sql   = "SELECT * 
                  FROM metric  
                  WHERE userid='".$tuserid."';";
        $result = $pdo->query($sql);
    }
    catch (PDOException $e) {
        $error =  $e->getMessage();
        include $errorpage;
        exit();
    }
    while ($row = $result->fetch()) {
                $metrics[] = array(
                    'id' => $row['id'],
                    'date' => $row['date'],
                    'value1' => $row['value1'],
                    'value2' => $row['value2'],
                     'value3' => $row['value3'],
                     'value4' => $row['value4']
        );
    }

然后我用这个输出它:

<table border="1" cellpadding="2px">
 <thead>
      <tr>
          <th bgcolor="#CECECE">Date</th>
          <th bgcolor="#CECECE">Candidates Added</th>
          <th bgcolor="#CECECE">Candidates Edited</th>
          <th bgcolor="#CECECE">Notes Added</th>
          <th bgcolor="#CECECE">Candidates Forwarded</th>
      </tr>
   </thead>
   <tbody>
<?php   
    for ($i=0;$i<count($metrics);$i++){
    ?>
    <tr>
          <td><center><?php echo $metrics[$i]['date'] ?></center></td>
          <td><center><?php echo $metrics[$i]['value1'] ?></center></td>
          <td><center><?php echo $metrics[$i]['value2'] ?></center></td>
          <td><center><?php echo $metrics[$i]['value3'] ?></center></td>
          <td><center><?php echo $metrics[$i]['value4'] ?></center></td>
  </tr>

<?php   
    }
?>
</tbody>
</table>

这是一个输出示例:

如何将数据分成从星期一到星期日的周数?

【问题讨论】:

  • 你可以GROUP BY WEEK(Date,1)。 (如有必要,首先从字符串转换日期)。查看WEEK() 函数,并确保您使用正确的模式(第二个参数),否则您的年终处理可能不是您想要的。
  • MySQL 中日期列的列类型是什么?如果它不是本机日期类型,则可以使用 STR_TO_DATE 将存储的值转换为可以操作的值。您也可以在 PHP 端使用 $day_of_week = date('N', strtotime($metrics[$i]['date']) ); // 1 = 周一至 7 = 周日

标签: php mysql date


【解决方案1】:

将 DAYOFWEEK() 添加到您的查询中:

$sql   = "SELECT *, DAYOFWEEK(date_field) as DWNum
            FROM metric  
            WHERE userid='".$tuserid."';";

并在 $metrics 数组中添加字段的位置添加。

当您循环并构建表格时:

if($metrics[$i]['DWNum']==1) //1=Sunday
{
   echo "<tr><td colspan='5'>NEW WEEK</td></tr>";
}

【讨论】:

  • 太棒了,谢谢,这比我想象的要简单得多
  • 问题在于,如果您错过任何一天,您可能会跳过星期日,然后它就不会知道新的一周开始了。你错过了 2015 年 3 月 13 日、2015 年 3 月 16 日、2015 年 3 月 18 日、2015 年 3 月 19 日。因此,使用这种方法,您错过一个星期天并中断只是时间问题。只有保证一周中的每一天都有代表,这才是好事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-29
  • 1970-01-01
  • 1970-01-01
  • 2015-02-02
  • 2020-08-12
  • 2015-10-14
  • 1970-01-01
相关资源
最近更新 更多