MySql替代PHP日期间隔

时间:2017-12-12 22:18:32

标签: php mysql date group-by intervals

我试图创建一个有点复杂的报告(至少对我而言),因为它允许用户选择报告的间隔,并按较小的间隔分组,例如每天,每周,每两周,每个月,每个季度等等。我发现如何使用PHP DatePeriod和DateInterval函数生成间隔表列,但现在我不得不转换为MySql以便将db列与PHP生成的html表列匹配。

<select class="form-control" id="columns" name="columns" tabindex="-1" aria-hidden="true">
    <option value="1 day" selected="">Each day</option>
    <option value="1 week">Each week</option>
    <option value="1 month">Each month</option>
    <option value="3 months">Each quarter</option>
    <option value="1 year">Each year</option>
</select> 

这是用于选择报告分组方式的选择选项:

$cols = array();
$colsIdentifiers = array();
$start_date = \Carbon\Carbon::parse(request('start_date'));
$end_date = \Carbon\Carbon::parse(request('end_date'));
$interval = DateInterval::createFromDateString(request('columns'));
$period = new DatePeriod($start_date, $interval, $end_date);
foreach ($period as $dt) {
   $cols[] = $dt->format("d-m-Y");
   $colsIdentifiers [] = $dt->format("dmY");
}

这是生成cols的php代码。

怎么能在Mysql中做同样的事情?

1 个答案:

答案 0 :(得分:0)

我认为您只能使用BETWEEN SQL命令来解决您的问题。您的数据库不需要知道这些重要日期是什么,但只保留这些数据。

尝试这样做:

<?php

$sql = "SELECT id, name, something";
$sql .= "FROM table";
$sql .= "WHERE datefield BETWEEN :minvalue AND :maxvalue";

$stmt = $pdo->prepare($sql);
$stmt->execute([':minvalue' => $minLimit, ':maxvalue' => $maxLimit]);
$data = $stmt->fetchAll();


foreach($data as $item) {
    // do something with your new set.
}

希望能帮助你。