SOUNDS LIKE
に注意してください あなたが思うように動作しません。 LIKE
と同等ではありません MySQLでは、%
をサポートしていないため ワイルドカード。
これは、「John」を検索するときに、クエリが「JohnDavid」を見つけられないことを意味します。これが単なるフォールバックである場合、これは許容できるかもしれませんが、理想的ではありません。
したがって、ここに別の提案があります(改善が必要な場合があります)。最初にPHPを使用するsoundex()
あなたが探しているキーワードのsoundexを見つけるための関数。
$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%'";
これで、発音が漠然と類似している名と姓のリストが作成されます(これは多くのエントリである可能性があり、検索に使用するsoundexプレフィックスの長さを長くすることをお勧めします)。次に、各単語のサウンデックスと検索語の間のレーベンシュタイン距離を計算し、それで並べ替えることができます。
次に、SQLインジェクションのバグを回避するために、MySQLのパラメータ化されたクエリを確認する必要があります。