通过相关性SQL搜索

时间:2018-07-17 08:33:11

标签: php mysql opencart2.x relevance

我很想从数据库中搜索字符串,但我希望它按相关性排序

我已经选择了这个示例,并且可以正常工作。

搜索之前

  
      
  1. 那只棕色的快狗跳起来像狐狸。
  2.   
  3. 那只敏捷的棕色狐狸跳过了那只懒狗。
  4.   
  5. 狐狸跳过了西尔斯大厦。
  6.   

搜索后

  
      
  1. 快速 棕色 狐狸跳过了懒惰
  2. li>   
  3. 快速 棕色 跳下了 fox 状。
  4.   
  5. 快速 fox 跳过了西尔斯大厦。
  6.   

使用的代码

SELECT *
FROM `items`
WHERE `description` LIKE 'quick'
AND (
  `description` LIKE 'brown'
  OR `description` LIKE 'fox'
  OR `description` LIKE 'lazy'
  OR `description` LIKE 'dog'
)
LIMIT 0 , 30
ORDER BY (
  (
    CASE WHEN `description` LIKE 'brown'
    THEN 1
    ELSE 0
    END
  ) + (
    CASE WHEN `description` LIKE 'fox'
    THEN 1
    ELSE 0
    END
  ) + (
    CASE WHEN `description` LIKE 'lazy'
    THEN 1
    ELSE 0
    END
  ) + (
    CASE WHEN `description` LIKE 'dog'
    THEN 1
    ELSE 0
    END
  )
) DESC

我的问题是。用户进行搜索时,搜索词是动态的。如何在顺序之间为每个添加一个,以使搜索起作用。

我尝试过的东西,但我仍然知道它不会起作用。首先,我不知道如何使+符号爆破

$sql .= " ORDER BY ";

foreach ($words as $word) {
        $sql .= " ( CASE WHEN `pd.name` LIKE  '%".$word."%'
    THEN 1
    ELSE 0
    END) + "; 
       }
$sql .= " ASC";

这是Opencart搜索查询示例。

下面的代码有效,但是我如何使其动态化

$sql .= " ORDER BY 
( CASE WHEN pd.name like '%".$word1."%' THEN 1 ELSE 0 END) 
+ 
( CASE WHEN pd.name like '%".$word2."%' THEN 1 ELSE 0 END) DESC";

0 个答案:

没有答案