select tu.mr_fname, tu.mr_lname, count(ts.mr_id) as `count`
from tbl_user tu
inner join tbl_schedule ts on ts.mr_id = tu.mr_id and
ts.sch_date between '2012-01-01' and '2012-08-01'
group by tu.mr_id
Oben erhalten Sie alle Benutzer mit einer Zeile im Zeitplan. Daher werden die Benutzer mit einer Anzahl von 0 nicht angezeigt.
select tu.mr_fname, tu.mr_lname, count(ts.mr_id) as `count`
from tbl_user tu
left join tbl_schedule ts on ts.mr_id = tu.mr_id and
ts.sch_date between '2012-01-01' and '2012-08-01'
group by tu.mr_id
Diese Abfrage wählt den Vor- und Nachnamen des Benutzers aus und zählt, wie oft diese Benutzer-ID in der Zeitplantabelle erscheint.
Dies geschieht durch Gruppierung nach der Benutzer-ID.
Und zusätzlich verwendet es eine linke Verknüpfung basierend auf Benutzer-ID und Datum. Es ist wichtig, hier die Datumsbedingung zu setzen, damit alle Benutzer ausgewählt werden. Dies liegt daran, dass der linke Join auch alle Benutzer enthält, die nicht übereinstimmen. Wenn Sie dies jedoch in die where-Klausel einfügen, werden nicht alle Benutzer ausgewählt. Mit anderen Worten, Sie erhalten für „gerry chandan“ keine Zählung von Null, wenn Sie die Datumsbedingung in die where-Klausel einfügen. Stattdessen würde er von den Ergebnissen ausgeschlossen werden.