sql >> Database >  >> RDS >> Mysql

PHP/MySQL:Markeer SOUNDS LIKE-queryresultaten

Merk op dat SOUNDS LIKE werkt niet zoals je denkt dat het werkt. Het is niet gelijk aan LIKE in MySQL, omdat het de % . niet ondersteunt jokerteken.

Dit betekent dat uw zoekopdracht "John David" niet zal vinden bij het zoeken naar "John". Dit kan acceptabel zijn als dit slechts uw uitwijkmogelijkheid is, maar het is niet ideaal.

Dus hier is een andere suggestie (die mogelijk moet worden verbeterd); gebruik eerst PHPs soundex() functie om de soundex van het trefwoord dat u zoekt te vinden.

$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 heb je een lijst met voornamen en achternamen die een vage gelijkenis vertonen in klank (dit kunnen veel items zijn, en misschien wil je de lengte van het soundex-voorvoegsel dat je gebruikt voor je zoekopdracht vergroten). Je kunt dan de Levenshtein-afstand tussen de soundex van elk woord en je zoekterm berekenen en daarop sorteren.

Ten tweede moet je naar geparametriseerde zoekopdrachten in MySQL kijken om fouten in SQL-injectie te voorkomen.



  1. MySQL - DATE_ADD maandinterval

  2. groeperen op eerste en laatste keer

  3. Hoe elke rij te selecteren waar de kolomwaarde NIET verschillend is

  4. Geen database geselecteerde fout, zelfs niet nadat een db is geselecteerd