PDO выбрать и показать массив данных с той же датой - PullRequest
0 голосов
/ 14 января 2020

Я сделал этот код. Чтобы показать данные, основанные на той же дате (дне)

        $group = array();
        $stmt = $conn->prepare("
            SELECT *,date(date_added) as dateadded
            FROM rr
            ORDER BY dateadded DESC
        ");
        $stmt->execute();
        $stmt->setFetchMode(PDO::FETCH_ASSOC);
        while ($res = $stmt->fetch()){
            $rtype = array();
                $rtype['type'] = "date";
                $rtype['date'] = date_format (new DateTime($res['dateadded']), 'M jS, Y');
                $rtype[] = $res;
            $result[] = $rtype;
        }

Что я получил в результате запроса sql

array
    (
        [0] => Array
            (
                [type] => date
                [date] => Dec 18th, 2019
                [0] => Array
                    (
                        [id] => 1
                        [user_id] => 1
                        [status] => 1
                        [date_added] => 2019-12-18 13:44:30
                        [dateadded] => 2019-12-18
                    )

            )

        [1] => Array
            (
                [type] => date
                [date] => Dec 20th, 2019
                [0] => Array
                    (
                        [id] => 3
                        [user_id] => 2
                        [status] => 2
                        [date_added] => 2019-12-20 14:53:04
                        [dateadded] => 2019-12-20
                    )

            )

        [2] => Array
            (
                [type] => date
                [date] => Dec 29th, 2019
                [0] => Array
                    (
                        [id] => 5
                        [user_id] => 3
                        [status] => 0
                        [date_added] => 2019-12-29 00:39:21
                        [dateadded] => 2019-12-29
                    )

            )

    )

Есть некоторые данные, которые не отображаются в результате в та же дата.

То, что я хочу показать, выглядит следующим образом.

Array
(
    [0] => Array
        (
            [type] => date
            [date] => Dec 18th, 2019
        )

    [1] => Array
        (
            [id] => 2
            [user_id] => 1
            [status] => 1
            [date_added] => 2019-12-18 13:44:30
        )

    [2] => Array
        (
            [type] => date
            [date] => Dec 20th, 2019
        )

    [3] => Array
        (
            [id] => 1
            [user_id] => 1
            [status] => 0
            [date_added] => 2019-12-20 14:53:04
        )

    [4] => Array
        (
            [id] => 3
            [user_id] => 1
            [status] => 0
            [date_added] => 2019-12-20 14:53:04
        )

)

В результате получается массив, подобный этому, с группировкой по дате (дню).

Как получить этот результат? Спасибо за помощь.

1 Ответ

0 голосов
/ 14 января 2020

Вам необходимо установить $group_date на значение $res['dateadded'], чтобы вы могли узнать, когда изменится дата. Нет необходимости использовать substr(), так как dateadded просто содержит дату без времени.

Вы должны положить sh $res на $result, а не $rtype.

$group_date = "";
$group = array();
$stmt = $conn->prepare("
            SELECT *,date(date_added) as dateadded
            FROM rr
            ORDER BY dateadded 
        ");
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC);
while ($res = $stmt->fetch()){
    $rtype = array();
    if ($group_date !== $res["dateadded"]) {
        $rtype['type'] = "date";
        $rtype['date'] = date_format (new DateTime($res['dateadded']), 'M jS, Y');
        $result[] = $rtype;
        $group_date = $res["dateadded"];
    }
    $result[] = $res;
}
...