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

Alle Daten dazwischen anzeigen, auch wenn kein Ergebnis

Sie können mithilfe von MySQL-Variablen einen automatisierten Ergebnissatz für alle gewünschten Daten erstellen.

select
      AllDaysYouWant.MyJoinDate,
      count( U.User_ID ) as NumberJoined
   from
      ( select
              @curDate := Date_Add(@curDate, interval 1 day) as MyJoinDate
           from
              ( select @curDate := '2012-11-21' ) sqlvars,
              Users
           limit 18 ) AllDaysYouWant
      LEFT JOIN Users U
         on AllDaysYouWant.MyJoinDate = U.User_JoinDate
   group by
      AllDaysYouWant.MyJoinDate

Die innere Abfrage, ich verbinde mich nur mit der Benutzertabelle ohne Schlüssel, also wird sie nur verwendet, um durch die Anzahl von X Datensätzen zu blättern, um die gewünschte Tagesspanne darzustellen ... Dies könnte 30, 100 oder was auch immer sein ... Nur solange die Tabelle (in diesem Fall Benutzer) so viele Datensätze hat, wie Sie erwarten.

DANN wird dieses Ergebnis von nichts als Tagen mit der Benutzertabelle verknüpft, diesmal jedoch basierend auf dem JOIN_DATE des Benutzers. Das einfache COUNT() sollte Ihnen das geben, was Sie wollen.

„AllDaysYouWant“ ist der Alias, der der internen Abfrage des ersten Teils von

zugewiesen ist
  ( select
          @curDate := Date_Add(@curDate, interval 1 day) as MyJoinDate
       from
          ( select @curDate := '2012-11-21' ) sqlvars,
          Users
       limit 18 ) AllDaysYouWant

Dies besagt im Grunde ... Geben Sie mir aus der Benutzertabelle (kann aber beliebig sein) 18 Datenzeilen (über Limit, könnte aber fast jede Anzahl von Datensätzen sein, aber Sie brauchen nur vom 22. November bis zum 6. Dezember, was nur ist 14 Tage, aber ich habe 18 gemacht, nur aus Prinzip, es könnte fast alles sein.Über der Benutzertabelle befindet sich (select @curDate :='2012-11-21' ) sqlvars.Jede select-Anweisung innerhalb einer Abfrage, die in Klammern als a eingeschlossen ist Tabellenquelle muss ein Alias ​​​​gegeben werden, und da es sich nur um eine Variable handelt, die ich verwenden werde, ist ihr Name egal. Diese Abfrage startet die Variable also am 21. November und die Select @curDate :=Date_Add ... blah blah gibt an, den aktuellen Wert von @curDate zu nehmen, 1 Tag hinzuzufügen (wird jetzt zum 22. November) und in der zurückgegebenen Zeile „MyJoinDate“ zu speichern. Also erstellt diese innere Abfrage jetzt Ihre Tabelle nur mit Daten ab dem 22. November Daten im Wert von 18 Tagen weiterleiten und den Alias ​​"AllDaysYouWant" für den Rest der Abfrage verwenden.

Ich habe die Abfrage, auf die Sie wahrscheinlich gestoßen sind, zur Verdeutlichung an alias.field everything angepasst ...