【问题标题】:match multiple column values to take record matching percentage匹配多个列值以获取记录匹配百分比
【发布时间】:2017-01-08 23:19:18
【问题描述】:

我有一个记录表,其中包含名字、姓氏、手机号码、人员详细信息的电子邮件。我想每次从前端页面获取这些值时检查名字是否与数据库中具有相同名字以及姓氏等的记录匹配。所以如果所有四列都匹配从首页获取的参数如何匹配百分比为 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 查询才能完成?...还是有更简单的方法?

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    你可以通过统计匹配字段的数量,然后逆向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;
    

    【讨论】:

    • 如果其中一个参数不匹配,此查询将返回 0。@Gordon
    • @Swarne27 。 . .考虑ORAND 之间的区别。只有一个必须匹配。
    猜你喜欢
    • 2014-03-07
    • 2013-06-10
    • 2020-10-09
    • 2019-07-07
    • 2021-01-25
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多