php - 如何获取MYSQL相关搜索结果

标签 php mysql sql regex search

我是 mysql 的新用户,我想通过句子搜索或关键字搜索(如 google 搜索)来获得相关的搜索结果。

表名:affiliate_products

id                      product_name
---                     ------------
1                       smartphone micromax 2gb ram
2                       smartphone samsung 2gb ram
3                       laptop sony ram
4                       lenovo a361 smartphone
5                       sony z1 dual core smartphone
6                       Sony HD Dual Sim Smartphone

我已经使用过如下的一些sql

SELECT *,

    CASE
      WHEN product_name LIKE '%vbsdf 2gb ram%'  THEN 50
      WHEN product_name LIKE '%vbsdf%2gb%ram%'  THEN 40
      WHEN product_name LIKE '%vbsdf%' AND product_name LIKE '%2gb%' AND product_name LIKE '%ram%' THEN 30
      WHEN product_name LIKE '%vbsdf%'  THEN 20
      WHEN product_name LIKE '%2gb%'  THEN 15
      WHEN product_name LIKE '%ram%'  THEN 10
      ELSE 0
    End as Importance

    FROM `affiliate_products`
    WHERE `product_name` LIKE '%vbsdf%'
    OR `product_name` LIKE '%2gb%'
    OR `product_name` LIKE '%ram%'
    ORDER BY Importance DESC;

也用过

Select `product_name` from `affiliate_products` WHERE match(`product_name`) against('+"vbsdf" +2gb' +'ram' in boolean mode)

但是这个sql查询不符合我的要求。

我想通过下面得到结果

如果搜索关键字:Micromax Ram

    id                      product_name
    ---                     ------------
    1                       smartphone **micromax** 2gb **ram**
    2                       smartphone samsung 2gb **ram**
    3                       laptop sony **ram**

inside ** ** keyword has been matched

如果搜索关键字:2gb 智能手机

id                      product_name
---                     ------------
1                       **smartphone** micromax **2gb** ram
2                       **smartphone** samsung **2gb** ram
4                       lenovo a361 **smartphone**
5                       sony z1 dual core **smartphone**
6                       Sony HD Dual Sim **Smartphone**

inside ** ** keyword has been matched

如果搜索关键字:四核智能手机

id                      product_name
---                     ------------
5                       sony z1 dual **core** **smartphone**
1                       **smartphone** micromax 2gb ram
2                       **smartphone** samsung 2gb ram
4                       lenovo a361 **smartphone**
6                       Sony HD Dual Sim **Smartphone**

inside ** ** keyword has been matched

如果搜索关键字:buy sony quad core ram smartphone

id                      product_name
---                     ------------
5                       **sony** z1 dual **core** **smartphone**
6                       **Sony** HD Dual Sim **Smartphone**
3                       laptop **sony** **ram**
1                       **smartphone** micromax 2gb ram
2                       **smartphone** samsung 2gb ram
4                       lenovo a361 **smartphone**

inside ** ** keyword has been matched

请帮助我如何使此 sql 获得此类信息结果。 提前致谢。

最佳答案

感谢所有回答提交者。我得到了答案并且我已经实现了它并且它工作正常并且 sql 查询是

    SELECT *,
       CASE
           WHEN product_name LIKE '%smartphone a361%' THEN 6
           WHEN MATCH (product_name) AGAINST ('+smartphone +a361' IN BOOLEAN MODE) THEN 5
           WHEN product_name LIKE '%smartphone%a361%' THEN 4
           WHEN product_name LIKE '%smartphone%' THEN 2
           WHEN product_name LIKE '%a361%' THEN 1
           ELSE 0
       END AS Importance
FROM `affiliate_products`
WHERE status = 'Active'
  AND (product_name LIKE '%smartphone%'
       OR product_name LIKE '%a361%')
ORDER BY Importance DESC

关于php - 如何获取MYSQL相关搜索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33008786/

相关文章:

MySQL——基于if null和join的高级查询

PHP 子方法

PHP:为什么当您向不存在索引的数组添加值时它不会引发通知?

PHP Mysql脚本错误

c# - 如何在 Ubuntu [C#] 中安装的 mysql 中存储图像?

mysql - 如何使用 mysqldump 保存 UTF8mb4 数据?

php - 使用 TIMESTAMPDIFF 获取 mysql 中两个时间戳之间的微小差异

php - 本地主机上的 Google App Engine 上的 "No system CA bundle could be found"

php - MySQL 忽略不起作用

mysql - 即使 2 条记录具有相同的时间戳也获取最新条目