2012-03-26 4 views
2

リファレンスとリストという2つのテーブルがあります。両方ともidとnameという2つのフィールドを持っています。PHP MySql - SELECT where similar_text()> x

reference: 
ref_id, ref_name 
1, john 
2, georges 
etc... 

list: 
lst_id, lst_name 
1, steward 
2, james 
3, john 
4, jones 
5, georges 
etc... 

similar_text()> 60の両方のテーブルから名前を選択したいと思います。ここで私が持っているしたい出力以下:スチュワードとジェームズがsimilar_textとして除外されるべきであると

ref_name, lst_name, similar_text() 
john, john, 100 
john, jones, 67 
georges, georges, 100 

注()60

を下回っているが、誰かが助けることができると思います。あなたの頼みに感謝します。乾杯。マークああ、ところで、私は私の目標を達成するためのよりよい解決策に開放されています...

+0

"similar_text()"の定義方法を明確にしてください。例えば、ジョンとジョンズは67を返します。これはどのように計算されますか? –

+0

そのsimilar_text()関数とは何ですか? MySQLにそのようなものはありますか? –

+0

ああええ。 similar_text()は、パーセントで表現された2つの文字列の一致を検索するphp関数です。http://php.net/manual/fr/function.similar-text.php – Marc

答えて

6

ほとんどlevenshtein in mysqlが必要です。これにより、文字列の違いを計算することができます。同様の

SELECT ref_name, lst_name, LEVENSHTEIN_RATIO(ref_name, lst_name) as textDiff 
FROM reference, list 
HAVING textDiff > 60; 

か何か:

あなたはその後のような何かを行うことができます。

注記:大きなデータセットで作業する場合、パフォーマンス上の問題が発生します。

+0

これをテストするために私に秒をください... Tks – Marc

+0

ありがとう、ソリューションが採用されました... – Marc

1

similar_textを使用するには、2つのテーブルをクロス結合し、結果の配列を取得し、結果配列にsimilar_text関数を使用する必要があります。 これを実行すると、3番目の補助テーブルに結果を保存できます。

ただし、MySQLのネイティブ関数SOUNDEX()を使用することもできますし、どちらの仕事をするかはcreate a Levehnstein functionとなります。