php – 如何在使用LIKE时按大多数匹配对MySQL结果进行排序
发布时间:2020-12-13 21:52:02 所属栏目:PHP教程 来源:网络整理
导读:我目前正在处理一个必须显示特定表中所有文章列表的查询,但它必须根据搜索表单对列表进行排序,以便首先显示包含最多/最佳匹配的文章,然后显示根本没有任何匹配将按字母顺序排序. 我已经使这个代码工作得很好,虽然我找不到按大多数匹配/相关性对匹配进行排序
我目前正在处理一个必须显示特定表中所有文章列表的查询,但它必须根据搜索表单对列表进行排序,以便首先显示包含最多/最佳匹配的文章,然后显示根本没有任何匹配将按字母顺序排序.
我已经使这个代码工作得很好,虽然我找不到按大多数匹配/相关性对匹配进行排序的方法. 这是我的代码: $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." "); 所以我需要找到一种方法来对包含匹配项的文章进行排序,以便首先对包含大多数匹配项的文章进行排序. 你可以看到我在这里制作的剧本: 解决方法
这是执行此操作的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 – 在分页表中显示大量数据而不会严重影响DB
- 无法查看使用php的ZipArchive函数创建的Zip(但有内存)内的文
- php解析字符串里所有URL地址的方法
- php – 如何将作曲家依赖从require-dev移动到require?
- php – 如何使用OAuth与Google日历仅访问一个日历?
- php – 使用wordpress作为子文件夹Rails heroku app,无法登
- PHP 进度条函数的简单实例
- 【LeetCode】Number of Islands 解题报告
- php – 如何在Zend Studio 10中开发移动应用程序
- 我可以将哪些服务器端PDF呈现组件与.NET,PHP,Ruby等一起使用