php - 如何进行 SQL 查询以选择与某个字符串匹配的所有行,然后根据匹配数对它们进行加权

标签 php mysql sql search sql-order-by

如何使用 LIKE 运算符创建一个匹配多个字符串的 SQL 查询,然后根据它获得的匹配项数生成 ORDERS 结果?

另外,有没有一种方法可以存储匹配的数量,以便我以后可以在 PHP 中使用该数字进行其他计算?

我目前正在使用来自另一个 Stack Overflow 答案的这段代码

SELECT searchtopics_topicid, searchtopics_content FROM searchtopics 
    WHERE searchtopics_content
         LIKE '%string1%' OR searchtopics_content 
         LIKE '%string2%' OR searchtopics_content
         LIKE '%string3%' 
    ORDER BY 
         case when searchtopics_content LIKE '%string1%' then 1 else 0 end + 
         case when searchtopics_content LIKE '%string2%' then 1 else 0 end + 
         case when searchtopics_content LIKE '%string3%' then 1 else 0 end 
    DESC

最佳答案

上面的代码看起来应该可以正常工作,要存储您只需将 ORDER BY 案例逻辑添加到选择列表中的数字。

SELECT searchtopics_topicid
     , searchtopics_content 
     , case when searchtopics_content LIKE '%string1%' then 1 else 0 end + 
       case when searchtopics_content LIKE '%string2%' then 1 else 0 end + 
       case when searchtopics_content LIKE '%string3%' then 1 else 0 end AS hit_ct 
FROM searchtopics 
WHERE searchtopics_content LIKE '%string1%' 
   OR searchtopics_content LIKE '%string2%' 
   OR searchtopics_content LIKE '%string3%' 
ORDER BY 
     case when searchtopics_content LIKE '%string1%' then 1 else 0 end + 
     case when searchtopics_content LIKE '%string2%' then 1 else 0 end + 
     case when searchtopics_content LIKE '%string3%' then 1 else 0 end 
DESC

在 MySQL 中你可以稍微简化这一切:

    SELECT searchtopics_topicid
         , searchtopics_content 
         , searchtopics_content LIKE '%string1%' 
           + searchtopics_content LIKE '%string2%' 
           + searchtopics_content LIKE '%string3%' AS hit_ct 
    FROM searchtopics 
    WHERE searchtopics_content LIKE '%string1%' 
        + searchtopics_content LIKE '%string2%' 
        + searchtopics_content LIKE '%string3%' > 0
    ORDER BY searchtopics_content LIKE '%string1%' 
           + searchtopics_content LIKE '%string2%' 
           + searchtopics_content LIKE '%string3%' DESC

关于php - 如何进行 SQL 查询以选择与某个字符串匹配的所有行,然后根据匹配数对它们进行加权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19914901/

相关文章:

php - 如何列出 Laravel 5 中的数据库连接?

php - PDO 对单个字符串的多个表列运行 LIKE 查询

php - 在 mysql 中应用联接后如何获取字段为 null 或空的所有列

php - 使用地理定位查找最近的城市

c# - 映射一个简单的数组

mysql - 返回状态为已交付的订单的产品总数量的 SQL(不同的两个表)

sql - 在存储过程中使用同名的临时表

Mysql 使用 max 进行动态列单选

php mysql 连接三个表并对相同id的项求和

javascript - md5 字符串的 base64_encoding - php 与 javascript 问题