html—如何允许用户根据一定数量的列选择要保留的重复元素(mysql php)

bkkx9g8r  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(264)

信息

我已经编写了一个php脚本,它接收一个csv文件并将其上传到mysql数据库。在这个脚本中,我根据四列first\u name、last\u name、birthdate和phone检查重复项。

$duplicateQuery = mysqli_query($conn, "SELECT * FROM students
        WHERE first_name ='$firstName'
          AND last_name ='$lastName'
          AND birthDate = '$dateOfBirth'
          AND phone='$homeNumber'");

如果查询返回0,那么它是唯一的,并且元素被插入到数据库中。但是,我要上传的脚本包含许多人工输入错误(在四列中的一列)。因此,我有另外四个语句,每个语句选择四个元素中的三个是否相同。

$duplicateQueryCase1 = mysqli_query($conn, "SELECT * FROM students
          WHERE first_name ='$firstName' AND last_name ='$lastName'
            AND birthDate = '$dateOfBirth'");
$duplicateQueryCase2 = mysqli_query($conn, "SELECT * FROM students
          WHERE first_name ='$firstName' AND last_name ='$lastName'
            AND phone='$homeNumber'");
$duplicateQueryCase3 = mysqli_query($conn, "SELECT * FROM students
          WHERE first_name ='$firstName' AND birthDate = '$dateOfBirth'
            AND phone='$homeNumber'");
$duplicateQueryCase4 = mysqli_query($conn, "SELECT * FROM students
          WHERE last_name ='$lastName' AND birthDate = '$dateOfBirth'
            AND phone='$homeNumber'");

问题

如果是这样,我想打开一个弹出消息来显示每个元素的信息,然后提示用户选择要保留的元素。我计划什么也不做,如果他们选择第一个选项,就保留第一个元素,否则将mysql中的信息更新为第二个元素。我在解决这个问题的方法中遇到了一个难题,那就是检查每个查询,然后使用带有窗体的弹出窗口是一个好方法还是有更有效的方法来实现这一点。如果你有洞察力,我将不胜感激。

rdlzhqv9

rdlzhqv91#

改进的一个方面可能是使用单个查询来确定是否应该插入行或是否应该询问用户。
下面的查询将计算作为分数匹配的4列的数目。score返回匹配的列数,并且只返回至少有3列匹配的行。

SELECT 
    `id`,
    `first_name`,
    `last_name`,
    `birthdate`,
    `phone`,
    IF(`first_name` = '$firstName',1,0) +
    IF(`last_name` = '$lastName',1,0) +
    IF(`birthdate` = '$birthdate',1,0) +
    IF(`phone` = '$phone',1,0) as `score`
FROM students 
WHERE 
    IF(`first_name` = '$firstName',1,0) +
    IF(`last_name` = '$lastName',1,0) +
    IF(`birthdate` = '$birthdate',1,0) +
    IF(`phone` = '$phone',1,0) >= 3

相关问题