Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 匹配多个列值以获取记录匹配百分比_Php_Mysql - Fatal编程技术网

Php 匹配多个列值以获取记录匹配百分比

Php 匹配多个列值以获取记录匹配百分比,php,mysql,Php,Mysql,我有一个记录表,其中包括名字、姓氏、手机号码、个人详细信息的电子邮件。每次从前端页面传递这些值时,我都要检查名字是否与数据库中具有相同名字和姓氏的记录匹配,以此类推。。因此,如果所有四列都与从头版获得的参数匹配,那么匹配百分比是100%。同样,如果三个参数匹配,那么它将是75%,依此类推 尝试 $firstName = 'peter'; $lastName = 'cetera'; $phoneNumber = '0384849494'; $emailAddress

我有一个记录表,其中包括名字、姓氏、手机号码、个人详细信息的电子邮件。每次从前端页面传递这些值时,我都要检查名字是否与数据库中具有相同名字和姓氏的记录匹配,以此类推。。因此,如果所有四列都与从头版获得的参数匹配,那么匹配百分比是100%。同样,如果三个参数匹配,那么它将是75%,依此类推

尝试

    $firstName = 'peter';
    $lastName = 'cetera';
    $phoneNumber = '0384849494';
    $emailAddress = 'peter@abc.com';
    $matchPercentage;
    $stmt = $mysqli->prepare("SELECT 
                              person.firstName,
                              person.lastName,
                              person.mobileNo,
                              person.email
                            FROM
                              person
                              LEFT OUTER JOIN reg_person ON (person.personId = reg_person.personId)
                              AND (person.messageid = reg_person.messageId)
                              AND (person.firstName = reg_person.firstName)
                              AND (person.lastName = reg_person.lastName)
                              AND (person.mobileNo = reg_person.mobile)
                              AND (person.email = reg_person.email)
                            WHERE
                              person.firstName = ? AND 
                              person.lastName = ? AND 
                              person.mobileNo = ? AND 
                              person.email = ?");

    $stmt->bind_param("ssss",$firstName,$lastName,$phoneNumber,$emailAddress) or die($mysqli->error);
    $stmt->execute();
    $stmt->bind_result($firstName,$lastName,$mobileNo,$email);
    $stmt->store_result();
    $num_of_rows = $stmt->num_rows;
    if($num_of_rows > 0){
        $matchPercentage = '100%';
    }else{......

需要16个mysql查询才能完成吗?。。。或者有更简单的方法吗?

您可以通过计算匹配字段的数量,然后按进行反向排序来获得最佳匹配记录:

SELECT p.*,
       ( (p.firstName = ?) + (p.lastName = ?) + (p.mobileNo = ?) + (p.email = ?) ) numMatches
FROM person p LEFT OUTER JOIN
     reg_person rp
     ON p.personId = rp.personId AND
        p.messageid = rp.messageId AND
        p.firstName = rp.firstName AND
        p.lastName = rp.lastName AND
        p.mobileNo = rp.mobile AND
        p.email = rp.email
 WHERE p.firstName = ? OR 
       p.lastName = ? OR 
       p.mobileNo = ? OR 
       p.email = ?
ORDER BY numMatches DESC
LIMIT 1;

如果其中一个参数不匹配,此查询将返回0@Gordon@Swarne27 . . . 考虑<代码>或和<代码>和之间的区别。只有一个必须匹配。