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

Php 如何创建一个SQL查询,选择与某个字符串匹配的所有行,然后根据匹配数对它们进行加权,php,mysql,sql,search,sql-order-by,Php,Mysql,Sql,Search,Sql Order By,我如何创建一个SQL查询,用LIKE操作符匹配多个字符串,然后根据得到的匹配数对结果进行排序 还有,是否有一种方法可以存储匹配的数量,以便我以后可以在PHP中使用该数量进行其他计算 我目前正在使用另一个堆栈溢出答案中的代码 SELECT searchtopics_topicid, searchtopics_content FROM searchtopics WHERE searchtopics_content LIKE '%string1%' OR searchtop

我如何创建一个SQL查询,用
LIKE
操作符匹配多个字符串,然后
根据得到的匹配数对结果进行排序

还有,是否有一种方法可以存储匹配的数量,以便我以后可以在PHP中使用该数量进行其他计算

我目前正在使用另一个堆栈溢出答案中的代码

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

上面的代码看起来应该工作得很好,要存储数字,只需将
orderby
case逻辑添加到select列表中即可

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

抱歉-我只是添加了一些东西来更详细地描述我的问题-有没有办法获取SQL查询计算的字数并将其传递给PHP语句?我只在SQL部分很有帮助,对PHP了解不多。
then 1 else 0 end
做了什么?如果我将值更改为,比如说,
10 else 0 end
,那么
10
会使该case语句相对于其他语句更重吗?完全正确,底部查询每个比较
searchtopics\u内容,如“%string2%”
如果匹配,将返回
1
,如果不匹配,将返回
0
,因此,将它们相加将得到匹配的数量。
CASE
语句类似于一个
IF..THEN
,如果它匹配THEN
1
否则
0
,如果要对它们进行加权,可以在顶部查询中更改
1
0
,或者将底部查询乘以某个权重,ie:
searchtopics\u像“%string1%”这样的内容*3
ok是的,谢谢-我想我可以用它来获得我原来想要的东西。我想知道你是否需要一个免费的文本搜索包-看看Lucene、Sphinx和ElasticSearch(我应该认为还有更多)。