mysql采用like模糊匹配并根据匹配度的多少对结果排序

寻技术 Mysql 2023年07月11日 75

有这样一个需求,在mysql数据库进行模糊匹配一个数据表中的姓名在其它数据表中多个字段中进行匹配,效果是想实现根据匹配量的多少进行结果排序。

数据样子就是表名2中的数据列xingming和nicheng中可能会有表名1中的xingming,根据匹配量计算匹配分值:

<?php
    $sql_search="select id,xingming from 表名1 where id='19jp.com' ";
    $result=$mysqli->query($sql_search);
    while ($rs=$result->fetch_assoc()){
    
        $sql_search2="select xingming,nicheng from 表名2 where  id='19jp.com' and (xingming like '%".$rs["xingming"]."%' or nicheng like '%".$rs["xingming"]."%') order by ((xingming like '%".$rs["xingming"]."%') + (nicheng like '%".$rs["xingming"]."%')   ) desc limit 1 ";
        $result2=$mysqli->query($sql_search2);
        if ($rs2=$result2->fetch_assoc()){
                //处理的逻辑
                $xingming=$rs2["xingming"];  //这个就是匹配次数最多的结果
        }
        //九品源码 www.19jp.com
    }
?>

这里面最重要的是就是order by这一段PHP代码,可以相加排序,然后用desc是为了匹配度最高就是倒序排列,而limit 1是因为我只要一个最匹配的结果,如果用while循环就不要limit 1了。

order by ((xingming like '%".$rs["xingming"]."%') + (nicheng like '%".$rs["xingming"]."%')   ) desc limit 1 ";


关闭

用微信“扫一扫”