Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    6

    Restituzione di valori null se non corrispondenti ai criteri richiesti

    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!

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    Quote Originariamente inviata da dcuder Visualizza il messaggio
    Gestione delle assenze con PHP/MySql:
    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)
    codice:
    SELECT 
    allievi.id_allievi AS mainID, 
    allievi.cognome, 
    allievi.nome, 
    assenze.* 
    FROM allievi 
    LEFT JOIN assenze ON  allievi.id_allievi=assenze.id_allievi and assenze.data='2014-05-28'
    ovviamente la data va inserita come parametro esterno.

    ciao
    Ultima modifica di 123delphi321; 28-05-2014 a 16:45

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    6
    Perfetto. Esattamente quello che cercavo, non avevo idea di poter/dover inserire un parametro esterno alla select.
    Grazie mille.

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.