explode in una query

frenkytribe

Utente Attivo
17 Gen 2013
87
0
0
Salve a tutti,
devo effettuare una ricerca in un database tramite una frase scritta in un input di testo, per fare in modo che ogni singola parola della frase venga cercata, credo che dovrei utilizzare explode per dividere tutte le parole all'interno della stringa, ma non mi è chiaro come impostare la query...
C'è qualcuno che potrebbe spiegarmi come fare? Magari facendo qualche esempio..

Spedisco la stinga tramite GET
PHP:
<?php
$stringa= $_GET['stringa']; //la salvo
$stringa= explode(" ",$stringa); //esplodo... qua, essendo GET, non mi è chiaro se mettere " " o "+"
//in ogni caso ho un array che contiene N parole
$query= "SELECT * FROM articolo WHERE titolo LIKE 'COSA?' ";
?>
Come faccio a sapere quanti slot contiene il mio array? E come cercare tutte le parole contemporaneamente?
 
Ultima modifica di un moderatore:
ciao
non ho mai provato, quindi faccio provare a te
PHP:
<?php
$stringa= $_GET['stringa']; //nel mezzo di camin...
$str_1= explode(" ",$stringa);//$str_1[0]=="nel" $str_1[1]=="mezzo"....
$str_2=implode(",",$str_1);//$str_2=="nel,mezzo,di,camin,...
$query= "SELECT * FROM articolo WHERE titolo IN ($str_2)";
?>
fai sapere se funzia
 
Ciao, così non funziona, o meglio, funziona ma non fa quello che che chiedo.
In poche parole io ho bisogno di uno script che funzioni in questa maniera: nel database ho 2 articoli, uno si chiama "Prova 1", l'altro "Come fare".
Nel campo di ricerca scrivo "prova come" e devo visualizzare entrambi gli articoli, non so se mi spiego...
 
In realtà una mezza soluzione ce l'ho, nel senso che dovrei fare questo:
supponendo che scrivo nel campo di ricerca "prova come"

Codice:
$str_1=explode(" ",$string);
$query="SELECT * FROM guida WHERE titolo LIKE '%$str_1[0]%' OR titolo LIKE '%$str_1[1]%' ORDER BY data DESC LIMIT ".$_GET['lim1'].",5";

I questo modo ottengo quello che voglio, ma ovviamente è poco dinamico, perché non è detto che l'utente inserisca una frase di 2 parole, potrebbe inserirne 3,4,5,..N.
Quindi mi serve sapere da quante parole è composta la frase, e tramite uno ciclo, aggiungere alla query "OR titolo LIKE '%str_1[$i]%' "

Si può mettere un foreach dentro la query?
 
Ultima modifica:
ciao
prova così
PHP:
ciao
ecco
<?php
$stringa= $_GET['stringa']; //la salvo
$stringa= explode(" ",$stringa); //lo spazio
//in ogni caso ho un array che contiene N parole
$like="";
foreach($stringa as $cosa){
	$like.= " titolo LIKE '%$cosa%' OR ";// '%..%' -> contiene, '..%' -> inizia con, '%..' -> finisce con
}
$like= substr($like, 0, -4);//tolgo l'ultimo or
$query= "SELECT * FROM articolo WHERE $like ";
?>
così non devi stare a vedere quanti elementi ha l'array
 
Ultima modifica:

Discussioni simili