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