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

PHP/MySQL:Fremhæv LYDER SOM forespørgselsresultater

Bemærk at SOUNDS LIKE virker ikke som du tror. Det svarer ikke til LIKE i MySQL, da den ikke understøtter % jokertegn.

Det betyder, at din forespørgsel ikke finder "John David", når du søger efter "John". Dette kan være acceptabelt, hvis dette blot er din reserve, men det er ikke ideelt.

Så her er et andet forslag (som måske trænger til forbedring); Brug først PHP'er soundex() funktion for at finde soundex for det søgeord, du leder efter.

$soundex = soundex($word);
$soundexPrefix = substr($soundex, 0, 2); // first two characters of soundex
$sql = "SELECT lastname, firstname ".
    "FROM table WHERE SOUNDEX(lastname) LIKE '$soundexPrefix%' ".
    "OR SOUNDEX(firstname) LIKE '$soundexPrefix%'";

Nu har du en liste over fornavne og efternavne, der har en vag lighed i lyden (dette kan være mange poster, og du vil måske øge længden af ​​soundex-præfikset, du bruger til din søgning). Du kan derefter beregne Levenshtein-afstanden mellem soundex af hvert ord og dit søgeord og sortere efter det.

For det andet bør du se på parametriserede forespørgsler i MySQL for at undgå SQL-injektionsfejl.



  1. Sådan håndhæves unikke på tværs af flere tabeller

  2. Hvordan tilføjer jeg mere end én række med Zend_Db?

  3. eclipse - JPA-enheder fra tabeller, ingen skemaer angivet

  4. MySQLNonTransientConnectionException Kunne ikke oprette forbindelse til databaseserveren. Forårsaget af:java.lang.NullPointerException