脚本宝典收集整理的这篇文章主要介绍了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
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,请注明来意。