2017-01-08 7 views
0

私は、姓、名、携帯電話番号、人の詳細を含むレコードのテーブルを持っています。私はこれらの値をフロントエンドのページから渡して、ファーストネームがデータベースのレコードと一致するかどうかをチェックするたびにチェックしたいと思います。パラメータは正面のページからいくつかの一致する割合が100%です。 3つのパラメータは?それは75%になるだろうというように...複数の列の値を一致させてレコードの一致率を取得します

試み...

$firstName = 'peter'; 
    $lastName = 'cetera'; 
    $phoneNumber = '0384849494'; 
    $emailAddress = '[email protected]'; 
    $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

あなたは一致するフィールドの数をカウントして、逆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

これらのパラメータの一つは、ゴードン – Swarne27

+0

@一致していない場合、このクエリは0を返します@。 Swarne27。 。 。 'OR'と' AND'の違いを考えてみましょう。 1つだけが一致する必要があります。 –

関連する問題