【日付補完】コピペOK! SQLで取得した、歯抜けの日付順データを、PHPで穴埋めする便利メソッド

PHP
この記事は約4分で読めます。

この記事の最終更新日: 2023年2月3日

SQLで取得した、
歯抜けの日付順データを、PHPで穴埋めする
便利メソッド

MySQLやMariaDBで取得した日付順のデータ。取得する際に存在していないレコードの分、飛び飛びになっていることが多いです。
この飛び飛び(歯抜け)のレコード分、PHPで補完(穴埋め)する場合に、便利なメソッドを紹介します。

始まりと終わりの日付を指定して、全日付けの配列を作成。

使用するのは主にPHPのDatePeriodDateIntervalです。

1日ずつは以下のコードで取得できます。

<?php

    /**
     * getDatePeriod
     * 開始日付から終了日付までのDatePeriodを返す。
     * @param string $startDate
     * @param string $endDate
     * @return DatePeriod
     */
    public function getDatePeriod(string $startDate, string $endDate): DatePeriod
    {
        return new DatePeriod(
            date_create(startDate), //$startDateは'2020-01-01'などの、始まりの日付
            new DateInterval('P1D'),
            date_create($endDate)->add(new DateInterval('P1D')) //$endDateは'2021-12-01'などの、終わりの日付
        );
    }

0から23時までの時間カラム含めたい場合

以下の記事を参考にしてください。

SQLの結果配列と、全日付配列を使って、新しい配列を作る。

次に、取得したSQL配列と突き合わせて、存在しない日付けだった場合0などのデフォルト値の配列を代入するなどして、新しい配列を作ればOKです。

例えばリンゴの売上をSQLで取得し、結果をこのような配列にしていた場合。(超適当な設定です)

<?php
$result = [
    {
    'date' => '2022-4-1',
    'total_apple' => '2400',
    'total_benefit' => '820000',
    },
    {
    'date' => '2022-4-2',
    'total_apple' => '2200',
    'total_benefit' => '790000',
    },
     {
    'date' => '2022-4-2',
    'total_apple' => '3200',
    'total_benefit' => '990000',
    },
     {
    'date' => '2022-4-10',
    'total_apple' => '1600',
    'total_benefit' => '440000',
    },
]

4月1日、4月2日、4月3日、4月10日はリンゴが売れたようです。

その結果をブラウザで表示する場合、4月4日から4月9日は’0’として表示したいはずです。

そこでこの配列と、先ほど作った日付けの配列を使って、mapかforeachを使って、結合すれば完成です。

SQLの段階で歯抜けを防ぎたい場合

以下の記事を参考にしてください。

コメント

タイトルとURLをコピーしました