2016-08-16 117 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的语法不是很正确,暂时不用它)。

它可能偶尔会抛出不想要的东西,例如,如果用户写“公寓酒店”,它仍然会返回“酒店”,你可能会或可能不会想要。或者根据所涉及的词语甚至可能完全不相关。

一旦你找到比这更复杂的事情,你可能会进入搜索引擎和自然语言处理的领域。