ordine delle parole PHP, My sql

  • Creatore Discussione Creatore Discussione Sargon
  • Data di inizio Data di inizio

Sargon

Utente Attivo
22 Mar 2012
45
0
0
ciao a tutti,

ho un motore di ricerca mysql con interfaccia in php


nella stringa di ricerca ho utilizzato like e And per trovare due parole....

nel database ho scritto

marco manga la mela....

se sulla stringa scrivo marco e mela.... non c'è nessun problema e me lo trova.... se scrivo mela e marco... non produce risultati....

dove sta l'inghippo???
 
io da quel poco che so ...
usavo la seguente query

query= "SELECT * FROM tabella WHERE nome LIKE '%$cerca%' OR cognome LIKE '%$cerca%' OR parolechiave LIKE '%$cerca%';

mettiamo che su parole chiave scrivo autore, pittore

se voglio cercare due parole chiave faccio così credo..

query= "SELECT * FROM tabella WHERE nome LIKE '%$cerca%' OR cognome LIKE '%$cerca%' OR parolechiave LIKE '%$cerca%' OR parolechiave LIKE '%$cerca%';

se effettuo la ricerca inserendo autore e pittore me li trova.... ma se inserisco pittore ed autore non lo trova...:hammer:

c'è qualche soluzione?
 
ciao
c'è qualcosa che nom mi quadra nella query
intanto da dove salta e come fuori quella variabile $cerca e perchè tieni la stessa per tutti i campi?
se hai
PHP:
$cerca ="pinco pallo pallino";
con quella query
PHP:
<?php
//...
query= "SELECT * FROM tabella WHERE nome LIKE '%$cerca%' OR cognome LIKE '%$cerca%' OR parolechiave LIKE '%$cerca%' OR parolechiave LIKE '%$cerca%'";
var_dump($query);
//..
?>
il var_dump ti restituisce
string(193) "SELECT * FROM tabella WHERE nome LIKE '%pinco pallo pallino%' OR cognome LIKE '%$pinco pallo pallino%' OR parolechiave LIKE '%$pinco pallo pallino%' OR parolechiave LIKE '%pinco pallo pallino%'"
cioe una querystringa che cerca in tutti i campi il valore "pinco pallo pallino" e solo quello
mi sbaglierò, ma sei sicuro che la querystringa non dovrebbe essere fatta così

PHP:
query= "SELECT * FROM tabella WHERE nome LIKE '%$nome%' OR cognome LIKE '%$cognome%' OR parolechiave LIKE '%$chiave_1%' OR parolechiave LIKE '%$chiave_2%'";
 
Se vuoi effettuare una ricerca in tutti i campi della tabella e per tutte le parole, ti conviene strutturare il database in modo che sia FULLTEXT: https://www.mrw.it/mysql/articoli/ricerche-full-text-mysql_658.html.

In questo modo potrai fare qualcosa come:
PHP:
$query = "SELECT * FROM tabella WHERE MATCH(nome, cognome, parolechiave) AGAINST('{$cerca}')";
Senza doverti preoccupare dell'ordine delle parole.
 
Ciao,
una domanda:

hai un solo input per la ricerca o hai un input per ogni campo della tabella?

da come scrivi sembra uno ma vorrei esserne certo

perche se la stringa è "autore, pittore" non dovresti mai avere un risultato con LIKE


cmq semmai posta anche l'echo della query

echo $query;
 
Ultima modifica:

Discussioni simili