Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Laravel - uzupełnij brakujące daty i wyliczenia z bazy danych

To rozwiązanie mi się sprawdziło, najpierw stworzyłem tablicę ze wszystkimi datami w zakresie czasowym, z datami ustawionymi jako klucze i wartościami count ustawionymi na 0, a następnie zastąpiłem wartości po zapytaniu w DB, w tej samej tablicy z count wartości z zapytania:

$period = new DatePeriod( new DateTime($from), new DateInterval('P1D'), new DateTime($to));
      $dbData = [];

      foreach($period as $date){
          $range[$date->format("Y-m-d")] = 0;
      }

      $data = DB::table($request['option'])
                ->select(DB::raw('DATE(created_at) as time'), DB::raw('count(*) as count'))
                ->whereDate('created_at', '>=', date($from).' 00:00:00')
                ->whereDate('created_at', '<=', date($to).' 00:00:00')
                ->groupBy('time')
                ->get();

      foreach($data as $val){
        $dbData[$val->time] = $val->count;
      }

      $data = array_replace($range, $dbData);
    }

    return json_encode($data);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Liczenie z 2 tabeli i grupowanie według miesiąca

  2. jakiego typu danych użyć dla pola, które może zawierać wartość z wartości predefiniowanych w tabeli bazy danych?

  3. Dlaczego `log_slow_queries` łamie `my.cnf`?

  4. Jak stworzyć widok MySQL

  5. Adnotacja Hibernate 4 — błąd konfiguracji MySQL:java.sql.SQLException:nie można dodać ograniczenia klucza obcego