2012-08-07 8 views
5

mysqlで月名を選択する12行(毎月1行)を返し、指定された月のレコード数を返すクエリを作成する必要があります。私は2つのテーブル、months_tblとevents_tblを持っています。 events_tblの各レコードには、datetime列とcompany_id列があります。私は現在のようなものをやっているmysqlは毎月のレコード数を選択します

(私はまだWHEREのcompany_id句を持っていない注意してください):

SELECT months_tbl.month, COUNT(events_tbl.event_id) cnt 
FROM months_tbl 
LEFT JOIN events_tbl ON months_tbl.month_id = MONTH(events_tbl.appt_date_time) 
GROUP BY months_tbl.month 
ORDER BY months_tbl.month_id ASC; 

これはカウントして、12行が選択されたものを私は期待してい(のようなものを返します。その月のイベント、またはゼロがない場合は0):

**month** **cnt** 
January  0 
February  0 
March  0 
April  0 
May   0 
June   0 
July   0 
August  88 
September 99 
October  120 
November  0 
December  9 

ただし、会社に関係なくすべてのレコードが返されます。私は、クエリがそうでフィルタリングされることを確認する必要があり、私は、where句を追加しました:

**month** **cnt** 
August  88 
September 99 
October  120 
December  9 

すべてのアイデアは、なぜ私はすべてを失っています:

SELECT months_tbl.month, COUNT(events_tbl.appt_id) cnt 
FROM months_tbl 
LEFT JOIN events_tbl ON months_tbl.month_id = MONTH(events_tbl.appt_date_time) 
WHERE events_tbl.company_id = 1 
GROUP BY months_tbl.month 
ORDER BY months_tbl.month_id ASC; 

は私が追加私の結果になるwhere句私は左の結合を使用していますが、Wh​​ere句を追加すると、他の月のレコードですか?

+0

である

SELECT months_tbl.month, COUNT(events_tbl.appt_id) cnt FROM months_tbl LEFT JOIN events_tbl ON (months_tbl.month_id = MONTH(events_tbl.appt_date_time) AND events_tbl.company_id = 1 ) GROUP BY months_tbl.month ORDER BY months_tbl.month_id ASC; 

注意私のソリューションはあなたを助けましたか? – arnoudhgz

答えて

6

あなたはLEFT JOINを使用されますが、中にあなたの場所の文あなたが、それは「通常の」JOIN

このようにそれを書いてみ作る:AND events_tbl.company_id = 1LEFT JOIN

関連する問題