Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Nach Tag gruppieren und trotzdem Tage ohne Zeilen anzeigen?

MySQL erfindet keine Zeilen für Sie, wenn die Daten also nicht da sind, werden sie natürlich nicht angezeigt.

Sie können eine Kalendertabelle erstellen und daran teilnehmen,

create table calendar (
    day date primary key,
);

Füllen Sie diese Tabelle bis etwa 2038 mit Daten (einfach mit einer gespeicherten Prozedur oder einfach nur mit einigen allgemeinen Skripten), und etwas anderes wird wahrscheinlich kaputt gehen, bis das zu einem Problem wird.

Ihre Anfrage wird dann z.B.

SELECT logTime, COUNT(*) 
  FROM calendar cal left join logs l on cal.day = l.logTime 
WHERE day >= '2011-02-01' AND day <= '2011-02-04' GROUP BY day;

Jetzt könnten Sie die Kalendertabelle um weitere Spalten erweitern, die Ihnen den Monat, das Jahr, die Woche usw. mitteilen, sodass Sie problemlos Statistiken für andere Zeiteinheiten erstellen können. (und Puristen könnten argumentieren, dass die Kalendertabelle einen id-Integer-Primärschlüssel haben würde, auf den die Protokolltabelle anstelle eines Datums verweist)