2017-07-13 15 views
1

私はこのMySQLのキーワードに基づいてデータをフィルタリングする方法は?

マイフィルタテーブルのようなメッセージテーブルを持っている.Iキーワードをフィルタリングすることに関して、データを取得するために、問題に直面しています: -

+--+-------+-----------+---------+---------------+ 
|id|user_id|for_page_id|key_words| message | 
+--+-------+-----------+---------+---------------+ 
| 1|  12|  2 |he,you |You are awesome| 
| 2|  12|  2 |the,book |this is good | 
+--+-------+-----------+---------+---------------+ 

私はキーワードの文字列を持っていますそのキーワードに対応するメッセージを見つけたいと思います。
私はこれを試してみました: -

$string='he is good'; 
$keyWords=explode(' ',$string); 
$query="SELECT * FROM `filter` WHERE `key_words` like '".$keyWords[0]."' or`key_words` like 
     '".$keyWords[1]."' or`key_words` like '".$keyWords[2]."'"; 
echo ($query); 

クエリ外観は

SELECT * FROM `filter` WHERE `key_words` like 'he' or`key_words` like 'is' or`key_words` like 'good' 

を好き

| 1|  12|  2 |he,you |You are awesome| 
| 2|  12|  2 |the,book |this is good | 

受け入れ出力は

| 1|  12|  2 |he,you |You are awesome| 

どれでもあなたであるとして、それが出力を提供しますghtsは評価されるだろう。

+0

のようになります。 Mysqlのように、文字列のその部分を比較し、一致する場合は、列のすべての内容を返します。だからアプローチは間違っています。 –

+0

それでは、どうすればPHPコードでこれを行うことができますか? –

答えて

1

へのリンクです。希望はあなたに

$string='he is good'; 
$keyWords=explode(' ',$string); 
$searchQuery=''; 
foreach ($keyWords as $word) { 
    $word = trim($word); 
    if ($word) { 
     $searchQuery = $searchQuery . "find_in_set('$word', trim(key_words)) > 0 or "; 
    } 
} 
$searchQuery = chop($searchQuery, ' or '); 
$query="SELECT * FROM filter WHERE ".$searchQuery; 
echo ($query); 

を助けるクエリは私がより良いというだけMYSQLでそれをやろうと少しのPHPコードを使用することをお勧め

SELECT * FROM filter WHERE find_in_set('he', trim(key_words)) > 0 or find_in_set('is', trim(key_words)) > 0 or find_in_set('good', trim(key_words)) > 0 
+0

うまく働いています。 –

3

FIND_IN_SET()関数はおそらくあなたが探しているものです。

SELECT FIND_IN_SET('b','a,b,c,d'); 
-> 2 

文字列がリストにない場合は0を返します。ここで

はこれを試してみてください MySQL documentation

+0

提案していただきありがとうございます。 –

関連する問題