2016-07-13 7 views
0

のためのPHPの検索を行うことが、私はinput.This入力テキストがデータベースで検索され、結果は構文によって取得される与えることができ、ユーザーに検索ボックスを持っている...どのように類似した単語

$sql = "SELECT * FROM new WHERE FNAME LIKE '%$a%' LIMIT 0, 30 "; 
$result = $conn->query($sql); 
if ($result->num_rows > 0) 
{ 
    while($row = $result->fetch_assoc()) 
    { 
     { 
     echo '<tr>'; 
     echo $row["FNAME"]; 
     echo '<br>'; 
     echo '</tr>'; 
     } 
    } 
} 

その作業が、私の問題は私が似たような言葉を探したいのです。 例えば、誰もがemran検索し、私のデータベースはイムランを与えるために持っていなければならない場合.....

+0

これは解決するために非常に複雑な問題があり、このようになります。ただ1つの簡単なSQLクエリーでそれを行う簡単な方法はありません。あなたは、あなたが与えられた用語に似た用語を検索し、それに関連するエントリを見つけることを可能にする何らかの種類の検索インデックスを構築しなければならないでしょう。 「類似の」用語を見つけることは、「いくつかの文字を入れ替えて見てみる」から、テキストマイニングや機械学習までスコアリング関数全体に及ぶ可能性があります。 ;)それは明らかにSOのフォーマットに適合しません。 –

答えて

0

あなたはユーザー固有の名前を検索しているので、次に検索しながら、ユーザが任意のスペルミスを行った後でも、あなたに適切な結果を与えるであろうそのような直接的な方法はありません。

これは、最初に直接一致するものが見つからない場合は、類似した名前を検出して結果を返すように探します。私が考える

その他のオプションは、一般的なミスを含んでなる、すべての一般的なスペルミスが、元の名前を入力しながら、あなたのケースでは、カラムFNAMEは、(要件ごとに任意の名前)イムランとFNAME_SEARCHが含まれていますが起こる格納する別の列を作成していますなどemraan、omran、同様に作られた

は、だからあなたのクエリが

$sql = "SELECT * FROM new WHERE FNAME LIKE '%$a%' OR FNAME_SEARCH LIKE '%$a%' LIMIT 0, 30 "; 
+0

あなたのアイデアは私の心に入ってきました。でも問題は私にはたくさんの仲間があり、多くの行が挿入されています....名前だけでなく他のフィールドの検索も受け付けます.....私は少なくとも約4000の複製を作成する必要があります。 –

0

だけ変更where句あなたのクエリを構築したいことがあり

where soundex(FNAME) = soundex('$a') 

または

where FNAME sounds like '$a' 
+0

いいえ、うまくいきません....データベースフィールドも変更する必要がありますか? –

0

へ検索文字列として渡された最初の文字に依存します。最初の文字が母音(a、e、o、i、u)である場合、これらの母音を使用してすべての可能な組み合わせを構築する関数を実行できます。ここで意味されるものである。

<?php 
     $searchTerm  = 'emran'; 
     $probableTerms = buildProbableSearchTerms($searchTerm); 

     $sql = "SELECT * FROM new WHERE FNAME LIKE '{$probableTerms}' LIMIT 0, 30 "; 
     $result = $conn->query($sql); 
     if ($result->num_rows > 0) 
     { 
      while($row = $result->fetch_assoc()) 
      { 
       { 
        echo '<tr>'; 
        echo $row["FNAME"]; 
        echo '<br>'; 
        echo '</tr>'; 
       } 
      } 
     } 

     function buildProbableSearchTerms($searchTerm){ 
      $searchTerms = ""; 
      if(strlen($searchTerm)<1){ 
       return ""; 
      } 
      $arrVowels = array("a", "e", "i", "o", "u"); 
      $arrSString = str_split($searchTerm); 
      if(in_array(strtolower($arrSString[0]), $arrVowels)){ 
       array_splice($arrSString, 0, 1); 
       foreach($arrVowels as $vowel){ 
        $searchTerms .= "%{$vowel}" . implode("", $arrSString) . "% OR "; 
       } 
       $searchTerms = rtrim($searchTerms, " OR "); 
      }else{ 
       $searchTerms .= "%{$searchTerm}%"; 
      } 
      return $searchTerms; 

     } 



     var_dump($probableTerms); 
     // DISPLAYS: '%amran% OR %emran% OR %imran% OR %omran% OR %umran%' 
+0

それは実際に私が必要なものではありません。 –

関連する問題