• User

    Query per ricerca in db

    Saluti a tutti!

    Ho un piccolo problemino (che poi tanto piccolo non è!). In pratica, ho questa query

    [HTML]
    $sql = "SELECT * FROM azienda WHERE nome = '%$nome%' OR indirizzo = '%$indirizzo%' OR citta LIKE '%$citta%' OR cap='%$cap%' OR telefono='%$telefono%' OR fax ='%$fax%' OR iscrcciaa ='$iscrcciaa' OR posinail = '$posinail' OR posinps='$posinps' OR posiva='$posiva' OR cassaedile='$cassaedile' OR titolare = '%$titolare%' OR teltitolare = '$teltitolare' OR medico = '%$medico%' OR telmedico='$telmedico' OR rspp = '%$rspp%' OR telrspp='$telrspp' OR adpronsocc = '%$adpronsocc%' OR teladpronsocc ='$teladpronsocc' OR respcant = '%$respcant%' OR telrespcant = '$telrespcant'";
    $ricevuta=mysql_query($sql) or die (mysql_error());
    [/HTML]

    Questa query è inserita in una pagina che piglia le informazioni da campi che stanno in un'altra pagina. In pratica, se io inserisco solo alcuni campi, la query sviluppa TUTTI i dati presenti nel db, mentre, se compilo tutti i campi, la query funziona bene. Ora, il discorso è:
    esiste la possibilità di ignorare i campi lasciati in bianco?

    Grazie ragazzi... mi togliete un impiccio mostruoso!


  • Bannato User Attivo

    @irabad said:

    Saluti a tutti!

    Ho un piccolo problemino (che poi tanto piccolo non è!). In pratica, ho questa query

    [html]
    $sql = "SELECT * FROM azienda WHERE nome = '%$nome%' OR indirizzo = '%$indirizzo%' OR citta LIKE '%$citta%' OR cap='%$cap%' OR telefono='%$telefono%' OR fax ='%$fax%' OR iscrcciaa ='$iscrcciaa' OR posinail = '$posinail' OR posinps='$posinps' OR posiva='$posiva' OR cassaedile='$cassaedile' OR titolare = '%$titolare%' OR teltitolare = '$teltitolare' OR medico = '%$medico%' OR telmedico='$telmedico' OR rspp = '%$rspp%' OR telrspp='$telrspp' OR adpronsocc = '%$adpronsocc%' OR teladpronsocc ='$teladpronsocc' OR respcant = '%$respcant%' OR telrespcant = '$telrespcant'";
    $ricevuta=mysql_query($sql) or die (mysql_error());
    [/html]Questa query è inserita in una pagina che piglia le informazioni da campi che stanno in un'altra pagina. In pratica, se io inserisco solo alcuni campi, la query sviluppa TUTTI i dati presenti nel db, mentre, se compilo tutti i campi, la query funziona bene. Ora, il discorso è:
    esiste la possibilità di ignorare i campi lasciati in bianco?

    Grazie ragazzi... mi togliete un impiccio mostruoso!

    esistono diverse possibiltà, lato php controlli se il campo è valorizzato prima di aggiungerlo alla query, quindi:

     $sql = "SELECT * FROM azienda WHERE 1=2";
    $sql .= $nome ? " OR nome = '%$nome%'"  : "";
    $sql .= $indirizzo? " OR indirizzo = '%$indirizzo%' "  : "";
    ...
    
    ```Codice da testare.
    
    Spero di aver compreso la domanda, perchè non è che sei stato chiarissimo. :)

  • User

    Grazie innanzitutto per la veloce risposta!
    Il codice che hai postato è utile, ma non nel mio caso purtroppo... credo che la tua prima deduzione fosse quella più corretta. Mi spiego meglio (almeno ci provo!):
    Andiamo dall'inizio:
    Ho una pagina che mi serve per cercare le diverse tuple (tutte di una stessa tabella) partendo dai dati inseriti nei campi. Tramite metodo POST, passo questi dati ad un'altra pagina, che uso per la stampa dei risultati. Ora: se alcuni campi sono lasciati in bianco, la query restituisce TUTTE le tuple, a prescindere da ciò che inserisco nei campi. Se invece riempio tutti i campi, la query funziona egregiamente. Il problema è che mi serve a poco una ricerca se devo specificare tutti i campi manualmente ed obbligatoriamente...
    come faccio a verificare se un campo è vuoto o pieno e... soprattutto... come faccio a creare dinamicamente la query in base ai campi inseriti?
    Spero di essere stato più chiaro di prima! 🙂
    Grazie!!


  • Bannato User Attivo

    di fatto il codice che ti ho dato prima serve a creare la query dinamicamente, se $nome è valorizzato accodi (.=) alla query " OR nome = '%$nome%'" altrimenti accodi una stringa vuota "".


  • User

    Grazie, credo di aver capito! Unica cosa: come faccio a verificare se un campo è valorizzato o meno?
    Inoltre... saresti così gentile da spiegarmi il codice che hai scritto? Mi incuriosisce la clausola WHERE... perché hai scritto 1=2 ? E' una condizione che non si verifica mai...! :mmm:
    Grazie.


  • Bannato User Attivo

    hai provato il codice che ti ho dato?
    quando scrivo

     $sql .= $nome ? " OR nome = '%$nome%'"  : "";
    ```equivale a scrivere
    
    

    if($nome) { // se $nome è valorizzato
    $sql = $sql . " OR nome = '%$nome%'";
    } else {
    $sql = $sql . "";
    }

    A proposito, come mai quelle %? Non ne colgo il senso, di solito si usano per l'operatore LIKE, per l'= non servono.

  • User

    Hai ragione, l'operatore = non è indicato... infatti l'avevo usato per provare 🙂
    Ora funziona tutto! :yuppi:
    Ti ringrazio tanto, sei stato veramente d'aiuto!!!
    Ci stavo impazzendo :arrabbiato:
    :ciauz: