Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591

    [mysql] query complessa o query nel ciclo while..

    aiuto.. nel senso che davvero non sapevo come intitolare questo post..
    purtroppo però il titolo è azzeccato alla situazione..
    espongo la situazione:
    ho un sito di eventi. gli utenti possono prenotarsi. hanno una homepage in cui vedono le prenotazioni che hanno fatto, nei vari eventi. fino a qui tutto bene.
    ora.
    Per visualizzare il tutto faccio una query left join che mi relaziona l'utente, l'evento e la prenotazione:
    Codice PHP:
    SELECT FROM eventi LEFT JOIN prenotazioni ON (id_e id_eventiLEFT JOIN utenti ON (id_user id_utenteWHERE id_utente '$id_corretto' ORDER BY id_e DESC 
    ..e in effetti funziona tutto.

    MA.

    Se l'utente non ha effettuato nessuna prenotazione per un evento, non mi visualizza il titolo dell'evento con accanto scritto "aggiungi prenotazione per questo evento". So che è normale, nel senso che ha ragione lui
    Allora ho fatto una query più generica degli eventi
    Codice PHP:
    SELECT FROM eventi 
    e dentro al while faccio una ulteriore query (una per ogni evento ovviamente..) e mi stampo con un ulteriore ciclo le prenotazioni di quell'evento.
    Codice PHP:
    SELECT FROM prenotazioni WHERE id_eventi '$id_e' AND id_user '$id_corretto' order by id_p DESC 
    Esposto il tutto, la domanda. Esiste un modo (in SQL ovviamente sennò chiedevo in PHP.. ) per risolvere tutto con una sola query?

    ringrazio in anticipo ogni eventuale aiuto/aiutante..

  2. #2
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    niente eh..
    mi sa che se metto lo stesso quesito in PHP qualcuno mi aiuta..

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Non sono sicuro di aver capito.
    Non puoi aggiungere un campo alla query e tramite un if,se il campo è nullo, mostrare ciò che vuoi?

    select ....,if(campo is null,'bla bla bla', campo) as campo
    left join
    .....

  4. #4
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    ..credo di non aver capito io la risposta tua..

    quello che intendo è che quando c'è una join i risultati sono "solo" quelli legati.

    Se c'è un record nella tabella eventi che non ha corrispondenze, in questo caso prenotazioni, nella seconda tabella, non te lo mette nei risultati.. mentre a me interessava una query che mi restituisse tuuutti i risultati della tabella eventi, anche quelli senza valori corrispondenti, perchè legati dalla join, nella seconda tabella..
    ma non posso sapere se ci sono non-corrispondenze a priori senza fare altre query..
    devo farti un dump?
    Semplificando le query sotto:
    Codice PHP:
    SELECT FROM eventi LEFT JOIN prenotazioni ON (id_e id_eventiORDER BY id_e DESC 
    questa mi restituisce tutte le prenotazioni di un determinato evento. ma se un evento non ha prenotazioni, non restituisce niente.
    Invece quello che vorrei io è una query che mi desse comunque la lista di tutti gli eventi, poi se ci sono dati nelle prenotazioni me li da lo stesso.. quello che mi chiedo è se esiste in mysql una query così..

    intanto grazie dell'attenzione..

  5. #5
    la query

    SELECT * FROM eventi LEFT JOIN prenotazioni ON (id_e = id_eventi) ORDER BY id_e DESC

    in linea teorica ti dovrebbe restituire *tutti* gli eventi indipendentemente dalle prenotazioni

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da telegio
    devo farti un dump?
    Farebbe comodo.
    Come ti ha scritto optime col left join avrai tutti i record.

  7. #7
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    in linea teorica ti dovrebbe restituire *tutti* gli eventi indipendentemente dalle prenotazioni
    sì, giusto.. sono stato pessssssimo!!

    la mia questione è che mettendo
    WHERE id_utente = '$id_corretto'
    ovvio che mi prende solo quelli in cui l'utente c'entra qualcosa.. e q uesto è quello che sbagliavo io.. però, ovviamente, se lo tolgo mi tira fuori TUTTO.. diciamo che è normale..

    quindi quello che vorrei io è che mi tirasse fuori tutti gli eventi e le prenotazioni SOLO dell'utente in questione..

    per ora grazie comunque, qualcosa ci sto capendo..

  8. #8
    Originariamente inviato da telegio
    quindi quello che vorrei io è che mi tirasse fuori tutti gli eventi e le prenotazioni SOLO dell'utente in questione..
    detta meglio: TUTTI gli eventi ed EVENTUALMENTE le prenotazioni dell'utente; giusto?

  9. #9
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591

    si..

  10. #10
    forse basta

    codice:
    SELECT 
       * 
    FROM 
       eventi LEFT JOIN prenotazioni ON (id_e = id_eventi) 
       LEFT JOIN utenti ON (id_user = id_utente AND id_utente = '$id_corretto')
    ORDER BY 
       id_e DESC

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.