2012-01-24 4 views
2

私はWebデザイン、特にバックエンドのデザインには新しいので、PHPでの検索機能の実装についていくつか質問があります。私はすでにMySQL接続を設定しましたが、MySQLテーブルの特定の行にアクセスする方法はわかりません。また、検索用語とほぼ同じ結果を返すことを考えて、同様のテキスト関数が正しく実装されていますか?今は、まったく同じ結果しか返せない、または結果が返されません。たとえば、 "tex"を検索すると "text"を含む結果が返されますか?私はコーディングとロジックに多くの間違いがあることを認識しています。可能であれば助けてください。イベントは、アクセスしようとしている行の名前です。phpとmysqlデータベースを使用するときに効果的な検索アルゴリズムを実装する方法は?

$input = $_POST["searchevent"]; 
while ($events = mysql_fetch_row($Event)) { 
$eventname = $events[1]; 
$eventid = $events[0]; 
$diff = similar_text($input, $event, $hold) 
if ($hold == '100') { 
echo $eventname; 

break; 

else 
echo "no result"; 

}

ありがとうございます。

"類似テキスト"機能よりも効率的な検索方法についてのコメントがありましたが、LIKE機能を使用するにはどうすれば実装できますか?以下の例で

答えて

1

これを行うためのいくつかの異なる方法:

速く1(賢明なパフォーマンス)は次のとおりです。 select * FROM Table where keyword LIKE '%value%' この1トリックは終了し、すべての検索のいずれかと言って、ワイルドカードである%の配置でありますまたはこの値で始まります。

より柔軟性が、(少し)遅く1は、REGEXP関数とすることができます

Select * FROM Table WHERE keyword REGEXP 'value' 

これは、正規表現の力を使用しているので、あなたは、あなたがそれを望んでいたほど手の込んだ得ることができます。しかし、上記のようにしておくと、「貧弱な人のGoogle」という種類の検索結果が得られます。

名前を検索しようとすると、粘着部分が入ります。たとえば、SMIを検索した場合は、いずれかの名前が「smith」になります。しかし、姓と名のフィールドが分​​かれていればどちらも「Jon Smith」は見つかりません。だから、あなたはJon OR SmithやJon Smith OR Smith、Jonのいずれかを探すために検索を行う必要があります。それは本当にそこから雪を降らすことができます。

もちろん、何らかの高度な検索を行っている場合は、それに応じてクエリを条件付けする必要があります。たとえば、最初、最後、アドレスを検索する場合は、クエリごとにテストする必要があります。

SELECT * FROM table WHERE first LIKE '%value%' OR last LIKE '%value%' OR address LIKE '%value' 
+0

は完全一致または類似の一致を探すようにLIKEしますか?私はいつもmysql LIKEが完全一致を返すという前提の下にいました。 – user1111042

+1

好きな単語や単語の一部を取得します。真の「ファジー論理マッチング」を探しているなら、さらに一歩前進する必要があります。キーは、あなたが扱う予定のデータの量とプロジェクトが将来どこに行くことができるかを分析することです。あなたが数百のレコードを話しているなら、ちょうどフェッチオールで狂っていてください。それを超えることができれば、あなたはパフォーマンスについて心配しなければならない領域に入っているのです。そうしないと、UIがスピードの問題に悩まされます。 – bpeterson76

0

ルック:

$word2compare = "stupid"; 

$words = array(
    'stupid', 
    'stu and pid', 
    'hello', 
    'foobar', 
    'stpid', 
    'upid', 
    'stuuupid', 
    'sstuuupiiid', 
); 

while(list($id, $str) = each($words)){ 
    similar_text($str, $word2compare, $percent); 
    if($percent > 90) // Change percentage value to 80,70,60 and see changes 
    print "Comparing '$word2compare' with '$str': "; 

} 

はあなたが適用する方法を強い試合を$percentパラメータを確認することができます。

+0

非常に良い検索ロジックに近づいています。しかし、大(100万レコード)のDBでは、すべてのレコードを取得してこれを実行する必要があります。 MySQLの美しさは、今日のパフォーマンスです.....それを使用しないで残念です! – bpeterson76

+1

あなたと同意してください。誰もがmysql LIKE ....との文字列一致を行うことについてよく知っています。私はここでトピックを変更したくありません。質問はここで完全にaround_textに頼まれているので、私はその側面で答えを与えました。 –

+0

どのようにmysqlのような文字列の一致を実装するのだろうか?私はいつもLIKEが正確なマッチだけを探すと思った。 – user1111042

関連する問題