Как сгруппировать результат из MSQL db по месяцам из столбца миллисекунд? - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь получить общее количество элементов на основе месяца из базы данных MSQL, используя платформу SLIM. Когда я отображаю данные, я получаю результат, но отделяюсь, даже если они находятся в одном месяце. Мой код:

    $app->get('/view/test', function ($request, $response, array $args) {
      try {
    $con = $this->db;
    date_default_timezone_set('UTC+3h');
    $sql = "SELECT start_time,COUNT(*) as tt FROM parking_sessions GROUP 
     BY FROM_UNIXTIME(start_time/1000)";
    $result = null;
    $results = null;
    foreach ($con->query($sql) as $row) {

        $result['muda'] = date('M',($row['start_time']/1000));
        $result['total'] = $row['tt']; 
        $results[] =$result; 
        $total = count($results);
    }
    if ($result) {
        return $response->withJson(array('status' => 'true', 'date' => 
        $results, 'jumla' => $total), 200);
    } else {
        return $response->withJson(array('status' => 'Owner Not Found'), 
         422);
    }

} catch (\Exception $ex) {
    return $response->withJson(array('error' => $ex->getMessage()), 422);
}

});

И это дает мне следующий результат

      "date": [
    {
        "month": "Feb",
        "total": "1"
    },
    {
        "month": "Mar",
        "total": "1"
    },
    {
        "month": "Apr",
        "total": "1"
    },
    {
        "month": "Apr",
        "total": "1"
    }
],

И все необходимые результаты, как показано ниже

    "date": [
    {
        "month": "Feb",
        "total": "1"
    },
    {
        "month": "Mar",
        "total": "1"
    },
    {
        "month": "Apr",
        "total": "2"
    }
],

А моя БД выглядит как

    id slot_id    customer_vehicle_id    start_time        end_time             check_out_time      status


    1    1              2                1553249524000     1554346841515            1553111000          1

    2    6              4                1554351619803     1553253124000            1553214094          0

    3    6              4                1555224715000     1553253124000            1553214094          0

    4    7              3                5086800000        1553253124000            1553214094          0

1 Ответ

0 голосов
/ 14 апреля 2019

Вы не можете группировать по запросам с unixtime, так как вы получаете каждую секунду и минуту в unix time. что вам нужно, это преобразовать его в дату без времени. ВЫБЕРИТЕ start_time, COUNT (*) как tt ОТ ГРУППЫ parking_sessions BY DATE (FROM_UNIXTIME (start_time / 1000)) примечание: дата усекает минуты, и вы останетесь с датой только

...