2016-08-16 79 views
2

我在mysql數據庫表列keywords有csv關鍵字像「酒店,新酒店,好酒店」。Mysql搜索關鍵字後綴在csv字符串存儲在數據庫中

現在,當用戶輸入酒店它的工作原理(選擇數據),但不適用於酒店(它不應該)。現在我想要用戶輸入酒店,那麼它也應該符合酒店的關鍵字。

帶有後綴搜索的簡短內容應該可以工作。目前我實施以下。

$queried = trim(mysqli_real_escape_string($con,$_POST['query'])); 

$keys = explode(" ",$queried); 


$sql = 'SELECT name FROM image WHERE keyword LIKE "%$queried%"'; 

foreach($keys as $k){ 
$k= trim(mysqli_real_escape_string($con,$k)); 
    if(count($keys) > 1) 
    { 
    $sql .= ' OR keyword LIKE "%$k%" '; 
    } 
} 
+0

爲什麼不使用全文搜索? https://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html – Mojtaba

回答

0

我這樣做,這不是我想要的,但它適用於我的標準。

$suffix = array('','s','es','ing','ment'); // suffix you want to ad 

$sql = 'SELECT name FROM image WHERE keyword LIKE "%$queried%"'; 

foreach($keys as $k) 
    { 
     $k= trim(mysqli_real_escape_string($con,$k)); 

     for ($i=1; $i < sizeof($suf) ; $i++) 
     { 
      if(substr($k, (-1 * strlen($suf[$i])))==$suf[$i]) 
      { 
       $wp=substr($k, 0, (-1 * $i)); 
      }  
     } 
     if($wp!="") 
     { 
        $sql .= " OR keyword LIKE '%$k%' OR keyword LIKE '%$wp%' ";   
     } 
    } 
0

您必須(另外)詢問搜索項是否包含行中的任何單詞。目前你正在做相反的(這是精爲相反的情況,所以沒有擺脫它)

喜歡的東西:

$sql = 'SELECT name FROM image WHERE $queried LIKE "%" + keyword + "%"'; 

(道歉,如果MySQL的語法不是很正確,暫時不用它)。

它可能偶爾會拋出不想要的東西,例如,如果用戶寫「公寓酒店」,它仍然會返回「酒店」,你可能會或可能不會想要。或者根據所涉及的詞語甚至可能完全不相關。

一旦你找到比這更復雜的事情,你可能會進入搜索引擎和自然語言處理的領域。

相關問題