sql >> データベース >  >> RDS >> Mysql

オートコンプリートのためにMYSQLの会社名とPHPのあいまい一致を行うにはどうすればよいですか?

    SOUNDEX()を使用することから始めることができます 、これはおそらくあなたが必要とするものに役立つでしょう(私はユーザーが入力しているものの既存の選択肢の自動提案ボックスを想像します)。

    SOUNDEX()の欠点 は:

    • 長い文字列を区別できない。最初の数文字のみが考慮され、最後に分岐する長い文字列は同じSOUNDEX値を生成します
    • 最初の文字が同じでなければならないという事実。そうでないと、一致するものを簡単に見つけることができません。 SQL Serverには、2つのSOUNDEX値がどれだけ離れているかを示すDIFFERENCE()関数がありますが、MySQLにはそのような種類のものは組み込まれていないと思います。
    • MySQLの場合、少なくともによるとドキュメント 、ユニコード入力でSOUNDEXが壊れています

    例:

    SELECT SOUNDEX('Microsoft')
    SELECT SOUNDEX('Microsift')
    SELECT SOUNDEX('Microsift Corporation')
    SELECT SOUNDEX('Microsift Subsidary')
    
    /* all of these return 'M262' */
    

    より高度なニーズについては、Levenshteinの距離 を確認する必要があると思います。 (「距離の編集」とも呼ばれます)2つの文字列で、しきい値を使用します。これはより複雑な(=遅い)ソリューションですが、柔軟性が向上します。

    主な欠点は、それらの間の距離を計算するために両方の文字列が必要になることです。 SOUNDEXを使用すると、事前に計算されたSOUNDEXをテーブルに保存し、その上で比較/並べ替え/グループ化/フィルター処理を行うことができます。レーベンシュタイン距離では、「Microsoft」と「Nzcrosoft」の違いはわずか2であることがわかるかもしれませんが、その結果が得られるまでにはさらに時間がかかります。

    いずれにせよ、MySQLのレーベンシュタイン距離関数の例はcodejanitor.comにあります。 MySQLストアド関数としてのレーベンシュタイン距離(2007年2月10日)



    1. SQLを使用してMySQLデータベースの最初または最後の数文字を削除またはトリミングする

    2. SQLServerで一重引用符を置き換えます

    3. MSSQLServerのセキュリティとアクセス制御に関する未回答の質問

    4. SQL-階層を保存してナビゲートする方法は?