php – 如何在使用LIKE时按大多数匹配对MySQL结果进行排序

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 如何在使用LIKE时按大多数匹配对MySQL结果进行排序脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在处理一个必须显示特定表中所有文章列表查询,但它必须根据搜索表单对列表进行排序,以便首先显示包含最多/最佳匹配的文章,然后显示根本没有任何匹配将按字母顺序排序.

我已经使这个代码工作得很好,虽然我找不到按大多数匹配/相关性对匹配进行排序的方法.

这是我的代码

$seArch = $_POST["searhwords"];
$search = PReg_replace('/\s+/',' ',$search);

$SearchQueryArray = str_replace(",","",$search);
$SearchQueryArray = str_replace(" ",$SearchQueryArray);
$SearchQueryArray = explode(',',$SearchQueryArray);


$outputtt1 = '';
$outputtt2 = '';
foreach ( $SearchQueryArray as $queryword )
{
    $outputtt1 .= "tITle LIKE '%".$queryword."%' OR ";  
    $outputtt2 .= "title NOT LIKE '%".$queryword."%' AND ";  
}

$outputtt1 = rtrim($outputtt1,' OR ');
$outputtt2 = rtrim($outputtt2,' AND ');




$query_for_result = MysqL_query("SELECT * From mytable 
WHERE ".$outputtt1."
union all
SELECT * from mytable 
WHERE ".$outputtt2."
");

所以我需要找到一种方法来对包含匹配项的文章进行排序,以便首先对包含大多数匹配项的文章进行排序.

你可以看到我在这里制作的剧本:
http://www.genius-webdesign.com/test/querytest.php

解决方法

这是执行此操作的sql

select t.*
from mytable
order by ((title like '%keyword1%') +
          (title like '%keyword2%') +
          (title like '%keyword3%') +
          . . .
          (title like '%keywordn%')
         ) desc;

MysqL将布尔表达式视为数字,其中true为1.因此,这会计算匹配数.

顺便说一句,如果您的数据有任何大小,您可能会发现全文搜索比使用类似更有效.

编辑:

计算关键字的数量更具挑战性,但您可以这样做:

order by ((length(replace(title,'keyword1','x')) -
           length(replace(title,'')
          ) +
          (length(replace(title,'keyword2','')
          ) +
          . . .
          (length(replace(title,'keywordn','')
          )
         );

计算关键字的出现次数比仅查找其存在的位置更麻烦.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 如何在使用LIKE时按大多数匹配对MySQL结果进行排序全部内容,希望文章能够帮你解决php – 如何在使用LIKE时按大多数匹配对MySQL结果进行排序所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。