我有一张记录表,其中包含姓名,姓氏,手机号码,人员详细信息。我想检查每次从前端页面传递这些值以检查名字是否匹配数据库中具有相同名字和最后名称的记录等等。所以如果所有四列都匹配到从首页得到的参数如何匹配百分比是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查询吗?...还是有更简单的方法?
答案 0 :(得分:0)
您可以通过计算匹配字段的数量然后执行反向order by
来获得最佳匹配记录:
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;