Zwróć uwagę, że SOUNDS LIKE
nie działa tak, jak myślisz. Nie jest to odpowiednik LIKE
w MySQL, ponieważ nie obsługuje %
symbol wieloznaczny.
Oznacza to, że Twoje zapytanie nie znajdzie słowa „John David” podczas wyszukiwania hasła „Jan”. Może to być do zaakceptowania, jeśli jest to tylko twoja rezerwa, ale nie jest idealne.
Oto inna sugestia (która może wymagać poprawy); najpierw użyj PHP soundex()
funkcja, aby znaleźć soundex słowa kluczowego, którego szukasz.
$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%'";
Teraz będziesz mieć listę imion i nazwisk, które mają niejasne podobieństwo w brzmieniu (może to być wiele wpisów i możesz chcieć zwiększyć długość prefiksu soundex, którego używasz do wyszukiwania). Następnie możesz obliczyć odległość Levenshteina między soundexem każdego słowa a wyszukiwanym hasłem i posortować według tego.
Po drugie, powinieneś przyjrzeć się sparametryzowanym zapytaniom w MySQL, aby uniknąć błędów wstrzykiwania SQL.