2016-05-14 20 views
0

私はPHPでのMySQLのクエリ内のいくつかの問題に直面しています。MySQLの検索

私は、ベンガル語以下の「キーワード」という名前の列を持っていると、彼らは「作詞家」

サヤーナという名前のテーブルに「名前」という名前の別の列の「gauriprasanna Majumder」の値、rayanaに割り当てられています私はいくつかの連続を探していたとき、彼のような、私には、私は

だった、あなたは、クリシュナ、料理人、など、より多くの、あなたは、私は、あなたが、来る、滞在を呼び出すことになっています言葉リクE「あなた、私は、私は、」私は正しい答え「gauriprasanna Majumder」を取得しかし、私は「あなたがしている」それはどんな答えを与えていないようなランダムな単語を検索していたとき。

$query = "SELECT name FROM `lyricist` WHERE keywords LIKE '%$val%'"; 

はここで$ valが値の「あなた、私、私」や「あなたがしている」これらのタイプがあります。

なぜそれがランダムにアイテムを処理することですか?助けてください。

答えて

3
$query = "SELECT name FROM `lyricist` WHERE keywords LIKE '%$val%'"; 

はあなたにいくつかのテキストがあなたの価値を持って開始し、その後、あなたはいくつかのランダムな言葉を入れて、それらが正しい順序になっていない場合は、明らかにこのクエリが一致しませんいくつかのtext.Soで終わるすべての一致する列を取得します。クエリで

私はあなたが複数の値を持つとき、何がやりたいことだと思う別の変数val1とに入れている、VAL2、...とANDを使用して

$query = "SELECT name FROM `lyricist` WHERE keywords LIKE '%$val1%' AND keywords LIKE '%$val2%'"; 

つまり、あなたを構築する必要がありますクエリ動的にこのような何かが働くだろう:

<?php 
$val="keyword1,keyword2,keyword3"; 
$keywords=explode(',',$val); 
if(!empty($keywords)){ 
    $query="SELECT name FROM `lyricist` WHERE keywords LIKE '%$keywords[0]%' "; 
     if(count($keywords)>1){ 
     for($i=1;$i<count($keywords);$i++){ 
     $query.="AND keywords LIKE '%$keywords[$i]%' "; 
      } 
     }   
} 
?> 
+0

ああ!それは完璧に動作します。私は私が言葉などからの任意の一致を探していますので、言葉のようにすべてを一致させる必要はありません、以下のようなものにクエリーを編集したおかげでたくさん –

+0

@George - SELECT名を「%LIKE 'lyricist' WHEREキーワードの中から私たちは、%「またはLIKEキーワード」%のサヤーナの%「 「LIKEまたはキーワード」%金の%を持っている。しかし、私たちと金は、これら二つの言葉はROW1からのものであり、サヤーナはROW2からなので、それは2つの行を提供します。しかし、私は言葉などから、最大の単語に一致する1行を取得したいです。 そして、2つの行が、それは最初のものを返すことがよりマッチ単語の数が同じ場合。 私はそれをどのように行うことができますか?私は、MAX、正規表現、マッチを試みたが、正しい結果を取得できませんでした –