Query per 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: <img src="http://localhost/'.$row[2].'"> ', ' Quantità:', $row[3], ' Descrizione:', $row[4], '<BR>', "\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"? Ho provato anche a toglierla ma mi da errore

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!"?

inviato 8 anni fa
grifis78
X 0 X

con where definisci la condizione.. con SELECT selezioni le colonne mentre con FROM selezioni la tabella.. mettendo l'asterisco subito dopo  SELECT hai già selezionato tutte le colonne della Tabella From, in questo caso ambra...

per quando riguarda la visualizzazione del revord  potresti mettere una condizione dichiarando se il numero dei record cercati e pari a 0 scrivi questo altrimenti stampa il risultato..

comunque aspetta gianni che sicuramente sarà in grado si risponderti nel modo migliore ;D ;D

risposto 8 anni fa
felix1
X 0 X

1) where come ti hanno già scritto è la condizione per filtrare un record, se devi cercare la $chiave in un qualsiasi campo di un record devi aggiungere la condizione alla clausola where, a.e.:

SELECT * FROM ambra WHERE nome_articolo LIKE '%$chiave%' or codice_articolo LIKE '%$chiave%' or descrizione_articolo LIKE '%$chiave%'

e così via; in questo modo verranno selezionati tutti i campi (SELECT *) dalla tabella ambra (FROM ambra) dove (WHERE) nome_articolo contiene $chiave O codice_articolo contiene $chiave O descrizione_articolo contiene $chiave ecc.. ecc..

2) se le 2 o + parole sono nello stesso ordine sì; a.e.:

$chiave = 'collana oro' //arrivato dal form

troverà tutti i record che hanno qualsiasi cosa prima e dopo collana oro e non tutti quelli che contengono sia collana che oro; per il secondo caso (collana E oro) devi costruire una query più complessa dividendo le parole ricevute dal form.

3) Quando esegui la query controlla che non sia vuota, ci sono 2 modi:

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

a) controlli il numero di righe, se 0 non ci sono risultati

b) if(!$ricevuta) { non ci sono risultati}

e mostri il messaggio senza fare il ciclo.

risposto 8 anni fa
LonelyWolf
modificato 8 anni fa
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda