2012-08-07 12 views
5

muszę spreparować kwerendy w mysql że powróci 12 wierszy (jeden wiersz dla każdego miesiąca), który wybiera nazwę miesiąca, a liczbę rekordów dla danego miesiąca. Mam dwie tabele, month_tbl i events_tbl. Każdy rekord w pliku event_tbl ma kolumnę datetime i kolumnę company_id.mysql wybrać liczbę rekordów dla każdego miesiąca

Jestem obecnie robi coś jak (zawiadomienie nie mam jeszcze klauzulę 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; 

ta zwraca coś, co ja spodziewałem (wybrany 12 rzędów, z zliczania zdarzenia za miesiąc lub zero, jeśli nie było żadnych):

**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 

jednak zwraca wszystkie rekordy niezależnie od firmy. Muszę się upewnić, że zapytanie jest filtrowane przez tak, dodałem klauzuli WHERE:

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; 

po dodaniu gdzie klauzula moje wyniki stać:

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

Jakieś pomysły dlaczego tracę wszystko inne miesiące zapisują się po dodaniu klauzuli where, mimo że używam lewego sprzężenia?

+0

czy moje rozwiązanie Ci pomogło? – arnoudhgz

Odpowiedz

6

Używasz LEFT JOIN, ale w twoim gdzie oświadczenie swojej dzięki czemu jest „normalne” JOIN

Spróbuj napisać to tak:

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; 

Zanotuj AND events_tbl.company_id = 1 jest w LEFT JOIN

Powiązane problemy