Php 如何创建一个SQL查询,选择与某个字符串匹配的所有行,然后根据匹配数对它们进行加权
我如何创建一个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
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
,如果它匹配THEN1
否则0
,如果要对它们进行加权,可以在顶部查询中更改1
和0
,或者将底部查询乘以某个权重,ie:searchtopics\u像“%string1%”这样的内容*3
ok是的,谢谢-我想我可以用它来获得我原来想要的东西。我想知道你是否需要一个免费的文本搜索包-看看Lucene、Sphinx和ElasticSearch(我应该认为还有更多)。