我试图创建一个有点复杂的报告(至少对我而言),因为它允许用户选择报告的间隔,并按较小的间隔分组,例如每天,每周,每两周,每个月,每个季度等等。我发现如何使用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中做同样的事情?
答案 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.
}
希望能帮助你。