Visualizzazione dei risultati da 1 a 7 su 7

Discussione: JOIN + LIKE mysql

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    4

    JOIN + LIKE mysql

    Buongiorno a tutti,
    premetto che mi sto cimentando da pochissimo con php e mysql, utilizzo MAMP con phpmyadmin e mysql versione 5.5.9

    lo la necessitá di mostrare un elenco di tessere, con i relativi utenti e la loro azienda.
    i campi sono suddivisi in queste tabelle con i campi primari e in comune con le altre tabelle che vi riporto:

    utenti (id_utente) (id.azienda) e (id_tessera)
    tessere (id_tessera) ( id_tipologia)
    aziende (id_azienda)
    tipologie (id_tipologia)

    siccome non tutte le tessere sono assegnate ad un utente per mostrare le libere utilizzo una serie annidata di LEFT JOIN nella mia query che vi copio:


    SELECT *FROM tipologie LEFT JOIN (tessere LEFT JOIN (`utenti`LEFT JOIN aziende ON utenti.id_azienda = aziende.id_azienda ) ON tessere.id_tessera = utenti.id_tessera
    ) ON tessere.id_tipologia = tipologie.id_tipologia
    ORDER BY tessere.numero_tessera


    fin qui la query funziona (ditemi se c'e' un modo piu snello )

    il problema é che quando aggiungo la ricerca .. AND tessere.numero_tessera LIKE %$ricerca%

    nella pagina php da problemi con la query mentre in phpmyadmin da risultato 5 rige con numero tessera NULL... tessera inesistente in quanto tutte hanno un numero progressivo.

    qualcuno puó aiutarmi?? grazie mille

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    4
    ragazzi nessuno puó darmi qualche dritta?

  3. #3
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955

    Re: JOIN + LIKE mysql

    Originariamente inviato da shin81
    Buongiorno a tutti,
    premetto che mi sto cimentando da pochissimo con php e mysql, utilizzo MAMP con phpmyadmin e mysql versione 5.5.9

    lo la necessitá di mostrare un elenco di tessere, con i relativi utenti e la loro azienda.
    i campi sono suddivisi in queste tabelle con i campi primari e in comune con le altre tabelle che vi riporto:

    utenti (id_utente) (id.azienda) e (id_tessera)
    tessere (id_tessera) ( id_tipologia)
    aziende (id_azienda)
    tipologie (id_tipologia)

    siccome non tutte le tessere sono assegnate ad un utente per mostrare le libere utilizzo una serie annidata di LEFT JOIN nella mia query che vi copio:


    SELECT *FROM tipologie LEFT JOIN (tessere LEFT JOIN (`utenti`LEFT JOIN aziende ON utenti.id_azienda = aziende.id_azienda ) ON tessere.id_tessera = utenti.id_tessera
    ) ON tessere.id_tipologia = tipologie.id_tipologia
    ORDER BY tessere.numero_tessera


    fin qui la query funziona (ditemi se c'e' un modo piu snello )

    il problema é che quando aggiungo la ricerca .. AND tessere.numero_tessera LIKE %$ricerca%

    nella pagina php da problemi con la query mentre in phpmyadmin da risultato 5 rige con numero tessera NULL... tessera inesistente in quanto tutte hanno un numero progressivo.

    qualcuno puó aiutarmi?? grazie mille
    Andiamo con ordine.
    Innanzitutto non capisco la LEFT OUTER JOIN tra tipologie e tessere. Ogni tessera avrà sicuramente una tipologia. Al max puoi fare una LEFT con l'utente, anche se preferirei usare una NOT EXISTS se non devi visualizzare le informazioni di utenti ma solo di tessere.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    4
    intanto ti ringrazio per la risposta,

    le info su utente e azienda dell'utente le devo mostrare chiaramente solo per le tessere che risultino assegnate per le altre la query restituisce il pessimo "NULL"

    NOT EXISTS non ho ancora avuto modo di vederlo, sapresti postare l'esempio di come lo applicheresti?

  5. #5
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955
    Originariamente inviato da shin81
    intanto ti ringrazio per la risposta,

    le info su utente e azienda dell'utente le devo mostrare chiaramente solo per le tessere che risultino assegnate per le altre la query restituisce il pessimo "NULL"

    NOT EXISTS non ho ancora avuto modo di vederlo, sapresti postare l'esempio di come lo applicheresti?
    Ok, quindi è giusto usare le LEFT JOIN su utente / azienda
    Ti riscrivo la tua query un pò meglio ordinata

    codice:
    SELECT * FROM tessere
    JOIN tipologie
    ON tessere.id_tipologia = tipologie.id_tipologia
    LEFT OUTER JOIN utenti
    ON utenti.id_tessera = tessere.id_tessera
    LEFT OUTER JOIN azienda
    ON utenti.id_azienda = azienda.id_azienda
    ORDER BY tessere.numero_tessera
    La tua ricerca per numero della tessera deve essere fatta in una ipotetica clausola WHERE
    codice:
    WHERE tessere.numero_tessera LIKE %$ricerca%

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    4
    Perfetto, aggiungendo la where per la ricerca :


    codice:
    SELECT * FROM tessere JOIN tipologie ON tessere.id_tipologia = tipologie.id_tipologia LEFT OUTER JOIN utenti ON utenti.id_tessera = tessere.id_tessera LEFT OUTER JOIN aziende ON utenti.id_azienda = aziende.id_azienda WHERE tessere.numero_tessera LIKE '%$ricerca%' ORDER BY tessere.numero_tessera


    funziona alla perfezione

    sei stato gentilissimo! grazie ancora

  7. #7
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955
    Originariamente inviato da shin81
    Perfetto, aggiungendo la where per la ricerca :


    codice:
    SELECT * FROM tessere JOIN tipologie ON tessere.id_tipologia = tipologie.id_tipologia LEFT OUTER JOIN utenti ON utenti.id_tessera = tessere.id_tessera LEFT OUTER JOIN aziende ON utenti.id_azienda = aziende.id_azienda WHERE tessere.numero_tessera LIKE '%$ricerca%' ORDER BY tessere.numero_tessera


    funziona alla perfezione

    sei stato gentilissimo! grazie ancora
    Di niente, mi raccomando quando usi le OUTER JOIN (sia LEFT che RIGHT) aggiungere condizioni nella ON non è la stessa cosa che aggiungerle nella WHERE (come invece accade nella INNER JOIN).

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 © 2026 vBulletin Solutions, Inc. All rights reserved.