Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Select su 3 tabelle

  1. #1

    Select su 3 tabelle

    Salve a tutti! Son alle prime armi con php\mysql e ho da porvi un piccolo problema.
    questo in sintesi il mio database:

    CORSI

    ID (pkey)
    nome_corso
    anno_corso
    ...

    APPELLI

    ID (pkey)
    corso
    ...

    PRENOTAZIONI

    appello
    studente

    (appello, studente) unique


    Quello che dovrei fare è selezionare tutti gli appelli disponibili per lo studente corrente NON ancora prenotati, quindi diversi da quelli presenti nella tabella prenotazioni

    ho provato questa query ma ottengo dei doppioni

    SELECT appelli.ID, appelli.data, appelli.ora, appelli.note, corsi.nome_corso, corsi.anno_corso FROM appelli, corsi, prenotazioni
    WHERE prenotazioni.studente = $matricola
    AND prenotazioni.appello <> appelli.ID
    AND appelli.corso = corsi.ID
    ORDER BY appelli.data

    pls help

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2000
    residenza
    Edinburgh
    Messaggi
    401
    Credo manchi un join fra prenotazioni e appelli

    codice:
    SELECT appelli.ID, appelli.data, appelli.ora, appelli.note, corsi.nome_corso, corsi.anno_corso FROM appelli, corsi, prenotazioni
    WHERE prenotazioni.studente = $matricola
    AND prenotazioni.appello <> appelli.ID
    AND appelli.corso = corsi.ID
    AND prenotazioni.appello = appelli.id
    ORDER BY appelli.data

  3. #3
    mmm no non va così..non riesco proprio a venirne a capo

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2000
    residenza
    Edinburgh
    Messaggi
    401
    che errore ti dà esattamente?

    Puoi scrivere dei dati di esempio e i risultati della query?

  5. #5
    tabella prenotazioni:

    appello studente
    1 34546
    1 41550
    2 41550


    tabella appelli:

    ID corso data ora note
    1 1 2009-01-26 09:00 Laboratorio
    2 3 2009-01-14 11:00 Aula magna
    3 3 2009-02-10 15:00 -
    4 4 2009-01-28 17:00 -


    questo il risultato della query con $matricola = 41550

    ID data Crescente ora note nome_corso anno_corso
    2 2009-01-14 11:00 Aula magna Algebra lineare 1
    1 2009-01-26 09:00 Laboratorio Lab. informatic 3
    4 2009-01-28 17:00 - Analisi matematica I 1
    4 2009-01-28 17:00 - Analisi matematica I 1
    3 2009-02-10 15:00 - Algebra lineare 1
    3 2009-02-10 15:00 - Algebra lineare 1


    quello che voglio io è che non si selezionino gli appelli gia prenotati.dovrei ottenere quindi

    ID data Crescente ora note nome_corso anno_corso
    4 2009-01-28 17:00 - Analisi matematica I 1
    3 2009-02-10 15:00 - Algebra lineare 1


    :berto:

  6. #6

  7. #7
    non mi è di aiuto peccato..già provato con inner join il risultato è lo stesso..il problema della mia query sta tutto qui: prenotazioni.appello <> appelli.ID

    se sostituisco <> con l'operatore di uguaglianza ottengo il risultato opposto, mi seleziona gli appelli gia prenotati per lo studente..

  8. #8
    problema risolto finalmente

    posto la soluzione x i posteri:

    codice:
    SELECT appelli.ID, appelli.data, appelli.ora, appelli.note, corsi.nome_corso, corsi.anno_corso 
    FROM appelli, corsi
    WHERE appelli.ID NOT IN (SELECT appello FROM prenotazioni WHERE studente = $matricola)
    AND appelli.corso = corsi.ID 
    ORDER BY appelli.data;

  9. #9
    Perdonami ma hai creato un ECO mostro di query.
    Prova questa:

    codice:
    SELECT appelli.ID, appelli.data, appelli.ora, appelli.note, corsi.nome_corso, corsi.anno_corso
    FROM (appelli, corsi)
    LEFT JOIN prenotazioni ON (prenotazioni.appello = appelli.ID AND prenotazioni.studente != $matricola)
    WHERE appelli.corso = corsi.ID
    AND prenotazioni.appello = appelli.id
    GROUP BY appelli.ID
    ORDER BY appelli.data

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.