2012-08-07 19 views
5

Ho bisogno di creare una query in mysql che restituirà 12 righe (una riga per ogni mese) che seleziona il nome del mese e il conteggio dei record per il mese specificato. Ho due tavoli, un month_tbl e events_tbl. Ogni record nel file events_tbl ha una colonna datetime e una company_id.mysql selezionare il numero di record per ogni mese

Attualmente sto facendo qualcosa di simile (notare che non ho ancora la clausola 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; 

Ciò restituisce qualcosa di simile a quello che mi aspetto (12 file selezionati, con un conteggio di eventi per il mese, o zero se non ce n'erano):

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

comunque è tornare tutti i record a prescindere dalla società. Ho bisogno di assicurarsi che la query viene filtrato da così, ho aggiunto la clausola dove:

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; 

quando aggiungo la clausola where i miei risultati diventano:

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

Tutte le idee perché sto perdendo tutto gli altri mesi registrano quando aggiungo la clausola where, anche se sto usando un join di sinistra?

+0

la mia soluzione ti ha aiutato? – arnoudhgz

risposta

6

Si utilizza un LEFT JOIN, ma nel tuo dove la vostra dichiarazione che lo rende un 'normale' JOIN

provare a scrivere in questo modo:

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; 

Annotare il AND events_tbl.company_id = 1 è nel LEFT JOIN

Problemi correlati