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
上記はあなたにそれをスケジュールする行を持つすべてのユーザーを取得します。したがって、カウントが0のユーザーは表示されません。
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
このクエリは、ユーザーの名前と名前を選択し、ユーザーIDがスケジュールテーブルに表示される回数をカウントします。
これは、ユーザーIDでグループ化することによって行われます。
さらに、ユーザーIDと日付に基づいて左結合を使用します。すべてのユーザーが選択されるように、ここに日付条件を入力することが重要です。これは、左側の結合には、一致しなかったすべてのユーザーも含まれるためです。ただし、これをwhere句に指定すると、すべてのユーザーが選択されるわけではありません。つまり、where句に日付条件を指定すると、「gerrychandan」のカウントはゼロになりません。代わりに、彼は結果から除外されます。