2017-07-13 106 views
1

我面臨相對於檢索數據的問題。我篩選有這樣如何根據MySQL中的關鍵詞過濾數據?

過濾表信息表關鍵詞: -

+--+-------+-----------+---------+---------------+ 
|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

我會更好地建議使用小的PHP代碼,而只嘗試用MySQL來做到這一點。就像在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); 

查詢會像

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

感謝您的建議。 –

相關問題