Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Query per una ricerca

  1. #1

    Query per una ricerca

    Ok, torno a rompere con le banalità...

    Ho realizzato una piccola serie di scripts finalmente funzionanti, ovvero uno per l'inserimento di dati in un database, il loro aggiornamento, la loro visualizzazione..

    Adesso però volevo realizzare una piccola ricerca modificando lo script di visualizzazione. Quello che faccio è questo:


    $ricevuta = mysql_query("SELECT * FROM ambra WHERE nome_articolo LIKE '%$chiave%'");

    while ($row = mysql_fetch_row($ricevuta)) {
    echo 'ID: ', $row[0] , ' Nome: ', $row[1] , ' Immagine: ', ' Quantità:', $row[3], ' Descrizione:', $row[4], '
    ', "\n";
    }
    Ovviamente, $chiave conterrà il valore inserito tramite un form di ricerca. Le mie domande sono:

    1) Con "WHERE" definisco la colonna ove cercare; se volessi invece cercare in tutte le colonne, come devo modificare la clausola "WHERE"?

    2) Se l'utente inserisce due o più parole nel campo del form, la ricerca funzionerebbe comunque?

    3) Se la parola chiave non viene trovata, nella pagina non compare niente, ma come faccio un controllo su questo e quindi stampare a video qualcosa come "Nessun risultato trovato!"?

  2. #2
    Per quello che mi risulta:

    1) non devi usare WHERE ... carichi tutta la tabella e cerchi la corrispondenza nella riga con la funzione PHP che ti è più idonea.

    2) non mi è ben chiaro cosa intendi, però se ho capito: Dal form ricevi una stringa (indipendentemente da quante parole è composta) che è la tua chiave di ricerca ... se vuoi più chiavi devi avere più INPUT nel FORM.

  3. #3
    Originariamente inviato da Obeach
    Per quello che mi risulta:

    1) non devi usare WHERE ... carichi tutta la tabella e cerchi la corrispondenza nella riga con la funzione PHP che ti è più idonea.

    2) non mi è ben chiaro cosa intendi, però se ho capito: Dal form ricevi una stringa (indipendentemente da quante parole è composta) che è la tua chiave di ricerca ... se vuoi più chiavi devi avere più INPUT nel FORM.
    Innanzitutto, grazie per la risposta!

    1) mi spieghi meglio? se tolgo la clausola WHERE mi da errore

    2) ok, era proprio quello che volevo sapere

    Ho inserito una terza domanda nel primo post!

  4. #4
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    1) sinceramente non mi sono mai trovato a fare ricerche in tutte le colonne della tabella... concetualmente parlando potrei dirti WHERE * LIKE '%pippo%' ma nn sò se dico un' eresia

    2)dipende come imposti la ricerca...

    se l' utente inserisce "ciao mondo" e tu vuoi fare una ricerca con i 2 valori ben distinti
    Codice PHP:
    $chiave="ciao mondo";

    $query="SELECT * FROM tabella WHERE ";
    $clausule=array();

    $parole=explode(" ",$chiave);
    foreach (
    $parole as $termineclausule[]="colonna LIKE '%".trim($termine)."%' ";
    $end_clausule=implode(" OR ",$clausule);

    $end_query=$query.$end_clausule;

    echo 
    $end_query
    3)
    dopo aver fatto la query
    Codice PHP:
    if (mysql_num_rows($ricevuta) == 0) echo "nessun risultato"
    se sai l' inglese non penso ci sia bisogno di dirti cosa fa mysql_num_rows

    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  5. #5
    1) ho provato mettendo WHERE * LIKE... ma non funziona nemmeno in questo caso. Voglio cercare in tutti i campi in quanti la tabella in questione contiene sia il nome di un certo articolo che una descrizione dello stesso. Magari un utente cerca "piatto" e l'articolo in questione è tale, ma si chiama "pippo". Ora che ci penso, potrei fare qualcosa del tipo "WHERE (nome_articolo) AND (descrizione)? Adesso purtroppo non posso provare.

    2) Il codice da te scritto:

    [php]

    $chiave="ciao mondo";

    $query="SELECT * FROM tabella WHERE ";
    $clausule=array();

    $parole=explode(" ",$chiave);
    foreach ($parole as $termine) clausule[]="colonna LIKE '%".trim($termine)."%' ";
    $end_clausule=implode(" OR ",$clausule);

    $end_query=$query.$end_clausule;

    echo $end_query;

    [/p]

    potresti spiegarmelo un pò? Deduco che $parole sia un array ove inseriamo i diversi elementi della stringa $chiave. Non ho capito però bene cosa fa il foreach!

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.