【问题标题】:Mysql search keyword with suffix in csv string stored in database存储在数据库中的csv字符串中带有后缀的Mysql搜索关键字
【发布时间】:2016-08-19 13:54:02
【问题描述】:

我在mysql数据库表列keywords有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%" ';
  }
}

【问题讨论】:

标签: php mysql sql


【解决方案1】:

您必须(另外)询问搜索词是否包含行中的任何词。目前你正在做相反的事情(这对相反的情况很好,所以不要摆脱它)

类似:

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

(抱歉,如果 MySQL 语法不太正确,暂时没有使用它)。

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

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

【讨论】:

    【解决方案2】:

    我这样做不是我想要的,但它适用于我的标准。

    $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%' ";          
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      • 2011-09-06
      • 1970-01-01
      • 2016-02-03
      相关资源
      最近更新 更多