Gestione delle assenze con PHP/MySql:
ho una tabella allievi collegata ad una tabella assenze; per ogni assenza creo un record nella tabella assenze, impostando un valore di assenza booleano a 1, la data e ovviamente l'id dell'allievo.
La tabella allievi:
|id_allievi |cognome |nome
------------------------------------
|1 |ROSSI |LUIGI
------------------------------------
|2 |BIANCHI |MARIA
------------------------------------
|3 |VERDI |SANDRO
------------------------------------
|4 |GIALLI |ANNA
------------------------------------
|5 |BIANCHI |MARIA
------------------------------------
La tabella assenze:
|id_assenze |id_allievi |assenza |data
--------------------------------------------------------------------------------------
|1 |4 |1 |2014-05-27
--------------------------------------------------------------------------------------
|2 |5 |1 |2014-05-26
--------------------------------------------------------------------------------------
|3 |5 |1 |2014-05-27
--------------------------------------------------------------------------------------
|4 |5 |1 |2014-05-28
--------------------------------------------------------------------------------------
Ora, io vorrei con una query, agendo quindi solo lato database e non con query nidificate nel ciclo di lettura dei record fatto con PHP,
estrarre i nomi di tutti gli allievi e, in base alla data scelta, vedere se sono assenti o no.
SELECT allievi.id_allievi AS mainID, allievi.cognome, allievi.nome, assenze.* FROM allievi LEFT JOIN assenze ON allievi.id_allievi=assenze.id_allievi WHERE assenze.data='2014-05-28' OR isnull(assenze.data)
mi resituisce
|mainID |cognome |nome |id_assenze |id_allievi |assenza |data
--------------------------------------------------------------------------------------
|1 |ROSSI |LUIGI |null |1 |null |null
--------------------------------------------------------------------------------------
|2 |BIANCHI |MARIA |null |2 |null |null
--------------------------------------------------------------------------------------
|3 |VERDI |SANDRO |null |3 |null |null
--------------------------------------------------------------------------------------
|5 |BIANCHI |MARIA |1 |5 |4 |2014-05-28
--------------------------------------------------------------------------------------
Per quelli che non sono assenti nella data prescelta la query resituisce 'null' nei campi della tabella 'assenze' perché quei dati non esistono.
Però..... GIALLI ANNA non viene visualizzata perché nella tabella assenze il suo id compare, ma con data diversa, perché ha fatto assenze in una data diversa da quella prescelta, quindi giustamente il suo nome viene escluso dai risultati.
SELECT allievi.id_allievi AS mainID, allievi.cognome, allievi.nome, assenze.* FROM allievi LEFT JOIN assenze ON allievi.id_allievi=assenze.id_allievi
ovviamente mi restituisce
|mainID |cognome |nome |id_assenze |id_allievi |assenza |data
--------------------------------------------------------------------------------------
|1 |ROSSI |LUIGI |null |1 |null |null
--------------------------------------------------------------------------------------
|2 |BIANCHI |MARIA |null |2 |null |null
--------------------------------------------------------------------------------------
|3 |VERDI |SANDRO |null |3 |null |null
--------------------------------------------------------------------------------------
|4 |GIALLI |ANNA |1 |4 |1 |2014-05-27
--------------------------------------------------------------------------------------
|5 |BIANCHI |MARIA |2 |5 |1 |2014-05-26
--------------------------------------------------------------------------------------
|5 |BIANCHI |MARIA |3 |5 |1 |2014-05-27
--------------------------------------------------------------------------------------
|5 |BIANCHI |MARIA |4 |5 |1 |2014-05-28
--------------------------------------------------------------------------------------
Cioè mi replica tutti i dati per tutte le volte in cui uno è stato assente.
DOMANDA: come faccio ad avere un risultato come il seguente?
|mainID |cognome |nome |id_assenze |id_allievi |assenza |data
--------------------------------------------------------------------------------------
|1 |ROSSI |LUIGI |null |1 |null |null
--------------------------------------------------------------------------------------
|2 |BIANCHI |MARIA |null |2 |null |null
--------------------------------------------------------------------------------------
|3 |VERDI |SANDRO |null |3 |null |null
--------------------------------------------------------------------------------------
|4 |GIALLI |ANNA |1 |4 |1 |null
--------------------------------------------------------------------------------------
|5 |BIANCHI |MARIA |4 |5 |1 |2014-05-28
--------------------------------------------------------------------------------------
Grazie per la pazienza e per le vostre risposte!