2017-12-12 37 views
-1

私は、レポートの間隔を選択してより短い間隔でグループ化することができるので、(少なくとも私にとって)ちょっと複雑なレポートを作成しようとしています。毎週、毎週、2週間に1回、毎月に1回、四半期ごとに毎日、私は、PHP DatePeriodとDateInterval関数を使用してインターバルテーブルのカラムを生成する方法を見つけましたが、PHPで生成されたhtmlテーブルのカラムとdbカラムを一致させるためにMySqlに変換することに固執しています。PHPの日付間隔の代わりにMySql

<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コードです。

どうすれば同じことができますか?

+0

あなたが探しているものは、DATE_SUB関数です。https://www.w3schools.com/sql/func_mysql_date_sub.asp –

+1

あなたのスキーマは正確にはわかりません。あなたは精神的なフォーラムをしたいと思う必要があります – Strawberry

答えて

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. 
} 

希望お手伝いをしています。

関連する問題