2017-04-11 10 views
0

私は解決する必要がある検索パズルを持っていますが、私のスキルセットは最小です。私はこれをうまく説明しなければ謝ります。例えば、ユーザが「21いくつかのストリート、エセックス」と対応の「リーズいくつかの場所」を提出し、場合PHPファジィ検索2列とベストマッチを返します

| Start address  | End address   | 
----------------------------------------------- 
1 | Essex    | Moortown, Leeds  | 
2 | Place A, London  | Place B, Manchester | 
3 | Townsville, Essex | Leeds Town Hall  | 
4 | Essex Trading Estate | Another Leeds Estate | 
5 | Somewhere, Devon  | Yeoville    | 
6 | ...     | ...     | 

:問題を試してみて、証明するために、ここでは2つのデータベース列のデータの一例です私はMySQLのデータベースを検索し、最上位のX個のベストマッチを取り戻す必要があります。この例では、行1,3,4はすべて第1列のEssexと第2列のリーズを含みます。

PHPにはsimilar_text()とlevenshtein()の2つの関数がありますが、これは助けになるかもしれませんが、どのような部分マッチングが適切か、の検索結果。私はMySQLの中で似たようなものは見つけていません。

これを経験した人は誰でも私に何か指示を与えることができますか?必要な検索出力を得るために、関数のように、簡単な使用することができます

乾杯

アンディ

+0

両方のフィールドに「FULLTEXT」複合インデックスを入れ、MySQLの自然言語検索を使用することができます:https://dev.mysql.com/doc/refman/5.5/en/fulltext-natural-language.html – CD001

+0

MySQLの[全文検索](https://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html)機能を使用して調べることができます。 –

答えて

0

。大文字小文字を区別するには、下限または上限を使用します。

select start_address,end_address from table where lower(start_address) like '%urfirststring%' 
and lower(end_address) like '%ursecondstring%' 

検索文字列を下位にも渡します。

+0

ラムズありがとう。しかし、私が使用した例では、フォーム入力フィールドとデータベース列(町や都市など)の両方で一般的な単語が使用されていますが、これらはすべてのエントリに固有のあまり重要でない単語(道路名やポストコード)。私はフォームフィールド1を列1に、フィールド2を列2に一致させ、最も関連性の高い順に結果を得たいと考えています。 – Andy

関連する問題