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
Quanto sopra ti porterà tutti gli utenti con una riga nella pianificazione. Quindi gli utenti con un conteggio pari a 0 non verranno visualizzati.
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
Questa query selezionerà il nome e il cognome dell'utente e conterà il numero di volte in cui l'ID utente appare nella tabella di pianificazione.
Lo fa raggruppando per ID utente.
Inoltre, utilizza un join sinistro in base all'ID utente e alla data. È importante inserire qui la condizione della data in modo che tutti gli utenti siano selezionati. Questo perché il join sinistro includerà anche tutti gli utenti che non corrispondono. Ma se lo inserisci nella clausola where, tutti gli utenti non verrebbero selezionati. In altre parole, non otterrai un conteggio pari a zero per "gerry chandan" se inserisci la condizione della data nella clausola where. Invece sarebbe stato escluso dai risultati.