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

Discussione: complessa

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    178

    ricerca complessa

    Questa è la query di una "ricerca" semplice semplice.

    Codice PHP:
    $query"SELECT * FROM studenti_p WHERE nominativo LIKE '%$ricerca%'"
    Ora la cosa si fa più complessa.

    Voglio creare un form con ricerca incrociata, dove l'utente può selezionare diverse chiavi di ricerca.

    Ovviamente queste chiavi devono essere confrontate con record differenti all'interno della stessa tabella.

    Esempio campi tabella:
    Nominativo:
    Indirizzo:
    Telefono:

    L'utente dal form di ricerca può inserire in tre moduli di testo vuoti, le tre chiavi di ricerca e fin qui nessun problema:

    Codice PHP:
    $query"SELECT * FROM studenti_p WHERE nominativo LIKE '%$ricerca%' && indirizzo LIKE '%$ricerca1%' && telefono LIKE '%$ricerca2%'"
    ma come faccio a dire che se il campo è vuoto questo non deve essere conteggiato nella query di interrogazione?

    Voglio dire, quando dichiaro le tre variabili di ricerca, posso usare un IF e dichiararla nulla se il campo è nuovo. Ma poi la query di interrogazione non verrà falsata quando comunque tutte e tre le variabili vengono considerate?

    E' un interrogativo scemo, lo so; ma sono alle prime armi.

  2. #2
    ma come faccio a dire che se il campo è vuoto questo non deve essere conteggiato nella query di interrogazione?
    basta sostituire nella query che scritto OR al posto di AND

    aquatimer2000

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    178
    Ma scusa, se dei tre campi l'utente ne riempie due; OR, non dovrebbe impedire che "contemporaneamente" più di una chiave sia usata come chiavi di ricerca?

  4. #4
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    [supersaibal]Originariamente inviato da aquatimer2000
    basta sostituire nella query che scritto OR al posto di AND

    [/supersaibal]
    Sì ma se l'utente riempie tutti e 3 i campi di ricerca, la query non tirerà fuori solo ed esclusivamente i record che soddisfino contemporaneamente tutte e 3 le condizioni.
    Puoi fare così:
    Codice PHP:
    $where="";
    if (isset(
    $_POST['nominativo'])) {
     
    $where .= "nominativo LIKE'%".$_POST['nominativo']."%'";
    }
    if (isset(
    $_POST['indirizzo'])) {
     
    $where .= ($where == "") ? "nominativo LIKE'%".$_POST['nominativo']."%'" " AND nominativo LIKE'%".$_POST['nominativo']."%'";
    }
    [.. 
    e così via..]
    if (
    $where != "") {
     
    mysql_query("SELECT FROM studenti_p WHERE ".$where);


  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    178
    Proprio il ciclio di condizioni che stavo cercando.
    Lo provo, thx.

  6. #6
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    [supersaibal]Originariamente inviato da Chierico80
    Proprio il ciclio di condizioni che stavo cercando.
    Lo provo, thx. [/supersaibal]
    Prego.
    Comunque non penso ci siano soluzioni alternative (direttamente in SQL intendo) a quella di esaminare tutte le condizioni.

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    178
    Il tuo secondo if contiene un errore o semplicemente non ho capito bene io?
    Codice PHP:
    if (isset($_POST['indirizzo'])) {
    where .= ($where == "") ? "nominativo LIKE'%".$_POST['nominativo']."%'" " AND indirizzo LIKE'%".$_POST[indirizzo]."%'";

    Giusto così?

  8. #8
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Ehm no
    In realtà devi fare il controllo su ogni singolo campo.
    Codice PHP:
    if (isset($_POST['indirizzo'])) {
     
    $where .= ($where == "") ? "indirizzo LIKE'%".$_POST['indirizzo']."%'" " AND indirizzo LIKE'%".$_POST[indirizzo]."%'";

    In pratica cosa fa:
    è settato "indirizzo"?
    Se si allora controlla la stringa $where. Se già contiene qualcosa devo aggiungere un'altra condizione anteponendole un AND. Se è vuota devo mettere la PRIMA condizione quindi non devo usare alcun operatore logico.

  9. #9
    Sì ma se l'utente riempie tutti e 3 i campi di ricerca, la query non tirerà fuori solo ed esclusivamente i record che soddisfino contemporaneamente tutte e 3 le condizioni.
    giusto..! ho letto il problema un po' troppo in fretta!

    sorry
    aquatimer2000

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    178
    LOL, ora ci sono!
    Gran bel pezzo di codice per uno come me.

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