Mysql
 sql >> Database >  >> RDS >> Mysql

come implementare un algoritmo di ricerca efficace quando si utilizza php e un database mysql?

Un paio di modi diversi per farlo:

Quello più veloce (dal punto di vista delle prestazioni) è:select * FROM Table where keyword LIKE '%value%' Il trucco in questo è il posizionamento della % che è un carattere jolly, dicendo che cerca tutto ciò che finisce o inizia con questo valore.

Una più flessibile ma (leggermente) più lenta potrebbe essere la funzione REGEXP:

Select * FROM Table WHERE keyword REGEXP 'value'

Questo sta usando il potere delle espressioni regolari, quindi potresti essere elaborato come volevi con esso. Tuttavia, lasciare come sopra ti dà una sorta di "Google dei poveri", consentendo alla ricerca di essere frammenti di campi generali.

La parte adesiva arriva se stai cercando di cercare i nomi. Ad esempio, uno dei due troverebbe il nome "smith" se cercassi SMI. Tuttavia, nessuno dei due troverebbe "Jon Smith" se ci fosse un campo nome e cognome separati. Quindi, dovresti fare un po' di concatenazione per la ricerca per trovare Jon OR Smith OR Jon Smith OR Smith, Jon. Da lì può davvero esplodere.

Ovviamente, se stai facendo una sorta di ricerca avanzata, dovrai condizionare la tua query di conseguenza. Quindi, ad esempio, se volessi cercare per primo, ultimo, indirizzo, la tua query dovrebbe testare ciascuno:

SELECT * FROM table WHERE first LIKE '%value%' OR last LIKE '%value%' OR address LIKE '%value'