Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    1,056

    aiuto per query (record relazionati inesistenti?)

    Ciao a tutti,
    vediamo se riesco a spiegarmi.

    Io ho due tabelle.

    Tabella utenti, con id_utente e altri campi

    Tabella iscrizione, con id_utente, anno_iscrizione

    Ora, io faccio compilare tramite backoffice quando un utente rinnova l'iscrizione la tabella iscrizione, in modo che mi aggiunga l'id dell'utente e l'anno.
    In questo modo ho lo storico relazionato di tutti gli anni di iscrizione.

    Ora però ho un problema.
    Se voglio trovare gli utenti che non si sono iscritti nel 2006???

    Ovviamente nella tabella iscrizione non ci sarà il record id_utente, 2006.

    Ma che query faccio?

    Per ora mi è venuto in mente solo un forse assurdo ciclo su tutti i record della tabella utenti, all'interno del ciclo faccio una query sulla tabella iscrizione SELECT * FROM iscrizione WHERE id_utente=utente AND anno_iscrizione=2006

    ad esempio.
    Se mi restituisce 0 record non si è iscritto e lo aggiungo in un array, altrimenti è iscritto e passo al record successivo.

    Il problema è che io faccio la prima query su utenti e poi n query in base a quanti sono.
    Non è assurdo?
    Per ora dovrei fare 200 query!!
    200 utenti!!

    COme posso fare a risolvere questo problema?
    magari ho pensato male il db, non so..
    o c'è qualche join, qualche formula che non conosco..


    grazie
    ciao!

  2. #2
    codice:
    select *
    from utenti u
    left join iscrizioni  i USING (id_utente)
    where i.anno_iscrizione = '2006'
    AND i.id_utente IS NULL
    dovrebbe fare al caso tuo...

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    1,056
    grazie.

    Però non stampa nessun record

    se provo a togliere AND is Null ecc mi trova i record (il contrario di quello di cui ho bisogno).

    Quindi il problema è quel NULL


  4. #4
    togli il confronto con l'anno che effettivamente non ha senso.

    O c'e' l'anno quindi non e' NULL oppure non c'e' e quindi scarta il record.

    codice:
    select *
    from utenti u
    left join iscrizioni  i USING (id_utente)
    where i.id_utente IS NULL

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da piero.mac
    togli il confronto con l'anno che effettivamente non ha senso.

    O c'e' l'anno quindi non e' NULL oppure non c'e' e quindi scarta il record.

    codice:
    select *
    from utenti u
    left join iscrizioni  i USING (id_utente)
    where i.id_utente IS NULL
    No. Così trova solo quelli che non hanno nessuna iscrizione in nessun anno

    select * from utenti
    where not exists (select * from iscrizioni where iscrizioni.id_utente = utenti.id_utente and iscrizioni.anno_iscrizione = '2006')

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    1,056
    Originariamente inviato da luca200
    No. Così trova solo quelli che non hanno nessuna iscrizione in nessun anno

    select * from utenti
    where not exists (select * from iscrizioni where iscrizioni.id_utente = utenti.id_utente and iscrizioni.anno_iscrizione = '2006')

    Perfetto così funziona!!!
    Non ci sarei mai arrivata temo!!!

    Grazie mille davvero

    ciao

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.