Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: Query Condizionata

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    5

    Query Condizionata

    Salve, premetto che mi sono avvicinata da poco a questo mondo quindi magari quello che sto per chiedere potrebbe essere banale o non avere molto senso.

    Lato client ho un form in cui l'utente, compilando dei campi, stabilisce dei criteri di ricerca. L'utente deve compilare almento un campo ergo può compilare anche più campi. Lato server ho uno script che, a seconda dei campi compilati, mi deve far partire una query. Esiste un modo per evitare tutte le possibili combinazioni di campi compilati? mi trovo a fare una miriade di if(<criterio>) <query>

    le query sono tutte sulla stessa tabella, cambiano solo i campi che testo nella clausola where.

    Spero di esseremi spiegata..

    Grazie per l'eventuale aiuto!

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    5
    non cambia di molto...devo cmq usare n query e poi per associare la condizione alla variabile che testo negli switch dovrei cmq fare anche gli if, non saprei come settarla opportunamente lato client

  4. #4
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    posti fare qualcosa tipo
    Codice PHP:

    $condizioni 
    = array();

    if(isset(
    $_POST['campoA']) && isNotEmpty($_POST['campoA'])) $condizioni[] = $_POST['campoA'];
    if(isset(
    $_POST['campoB']) && isNotEmpty($_POST['campoB'])) $condizioni[] = $_POST['campoB'];
    ...

    $condizione ""
    for($i=0$i<count($condizioni); $i++){
    $condizione .= $condizioni[$i];
    if(
    $i != count($condizioni)- 1$condizione .= "&&";
    }

    $query "SELECT ... WHERE ".$condizione

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  5. #5
    Utente di HTML.it L'avatar di Luke70
    Registrato dal
    Jul 1999
    Messaggi
    767
    che ne dici di usare un prefisso omogeneo per i campi che ti interessano (tutti iniziano con "s_") seguito dal nome della colonna del db cui fanno riferimento.
    Così potresti fare un ciclo while ($_POST as $column_name=>$search_value) e, per gli elementi in cui $column_name nizia con s_, imposti una nuova condizione da accodare alla query

  6. #6
    Devi fare una cosa del genere:

    Codice PHP:
    ...
    $parametro_ricerca_1 = ...
    ...
    $parametro_ricerca_n = ...

    $query "SELECT * FROM tabella WHERE 1";

    if (isset(
    $parametro_ricerca_1)) {
        
    $query .= " AND campo1 = '$parametro_ricerca_1'";
    }

    ...

    if (isset(
    $parametro_ricerca_n)) {
        
    $query .= " AND campoN = '$parametro_ricerca_n'";
    }

    $result mysql_query($query) or die ("Errore: ".mysql_error());
    while (
    $record mysql_fetch_array($result)) {
        ...
    }
    ... 
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    Ciao, se della query cambia solo il numero di condizioni e almeno una deve essere selezionata potresti fare una cosa di questo tipo (mischio un po' pseudocodice a php....spero di essere comunque chiaro):

    Codice PHP:
    $condizione "";    // dichiari una variabile dove metterai tutte le condizioni

    if(isset(campo1)){                                        // se è settato il primo campo
         
    if($condizione == ""){                               // se la variabile condizione è vuota
                 
    $condizione .= "campo1 = \"valore1\" ";       // aggiungi la condizione alla variabile semplicemente (.= concatena una stringa)
         
    }
         else{         
    // altrimenti -> hai gia altre condizioni presenti
                 
    $condizione .= "AND campo1 = \"valore1\"";     // la leghi con un connettore logico AND / OR ....
         
    }
    }

    if(isset(
    campo2)){                                         // idem con il campo 2
         
    if($condizione == ""){                               // se la variabile condizione è vuota
                 
    $condizione .= "campo2 = \"valore2\" ";       // aggiungi la condizione alla variabile semplicemente (.= concatena una stringa)
         
    }
         else{         
    // altrimenti -> hai gia altre condizioni presenti
                 
    $condizione .= "AND campo2 = \"valore2\"";     // la leghi con un connettore logico AND / OR ....
         
    }
    }

    // etc. con tutti gli altri campi

    // poi fai la tua query con le condizioni dinamiche
    $query "SELECT * FROM tabella WHERE ".$condizione
    Questa è la cosa più semplice che mi viene in mente (io di solito faccio così)....sicuramente ci sarà anche qualche altro metodo migliore in caso di un gran numero di campi.

  8. #8
    Originariamente inviato da Luke70
    che ne dici di usare un prefisso omogeneo per i campi che ti interessano (tutti iniziano con "s_") seguito dal nome della colonna del db cui fanno riferimento.
    Così potresti fare un ciclo while ($_POST as $column_name=>$search_value) e, per gli elementi in cui $column_name nizia con s_, imposti una nuova condizione da accodare alla query
    Io non lo farei. Mai usare i dati in ingresso per costruire la struttura di una query: devi essere tu a scrivere la tua query, non un utente che ha voglia di rimaneggiare un form.

  9. #9
    Utente di HTML.it L'avatar di Luke70
    Registrato dal
    Jul 1999
    Messaggi
    767
    In linea di principio sono d'accordo, ma se il numero di campi da controllare è davvero notevole, potrebbe essere un'idea da non scartare.
    Ovviamente prevederei per lo meno una verifica sul nome dei campi (magari confrontandolo con un array di nomi ammissibili)

  10. #10
    Originariamente inviato da Luke70
    In linea di principio sono d'accordo, ma se il numero di campi da controllare è davvero notevole, potrebbe essere un'idea da non scartare.
    Ovviamente prevederei per lo meno una verifica sul nome dei campi (magari confrontandolo con un array di nomi ammissibili)
    Se hai un array dei nomi ammissibili allora cicla su quello, non su $_POST.

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.