【问题标题】:Mass email id duplicate check批量电子邮件ID重复检查
【发布时间】:2015-08-18 20:19:33
【问题描述】:

我有一个包含以下列的表格(email_list)

id INT(自动递增),email var char,状态 TINY-INT

用户有一个表单,其中只有一个字段,他可以从中上传 csv csv 仅包含一列带有电子邮件 ID 的列

csv 包含 min 100ma​​x 500 电子邮件 ID。

当用户点击上传按钮时

1) 我想检查 csv 中存在的电子邮件是否已存在于 email_list 表中

2) 检查电子邮件是否在 csv 本身中重复

如果没有找到重复项那么只有我可以在表格中插入所有电子邮件 ID

如果发现重复我想显示带有电子邮件列表的错误消息 存在于 email_list 表中 以及是否有任何电子邮件在 csv 中重复。

我正在使用代码点火器和 mysql

我怎样才能做到这一点?

如果 email_list 表有 5000 多行并且上传的 csv 包含 500 个电子邮件 ID,该怎么办

  • INSERT IGNORE 不适用(如果未找到重复项,则只有我可以在表中插入所有电子邮件 ID)

比较操作会花很多时间

请帮帮我!!

【问题讨论】:

    标签: php mysql codeigniter email csv


    【解决方案1】:

    首先检查数据库的 ID:

    SELECT email
    FROM email_list
    WHERE id IN (1,2,3,4,5,6)
    

    您可以在查询之前填充 ID 列表。

    $user_ids = array();
    foreach($users as $user) {
        $user_ids[] = $user->id;
    }
    
    // Do query here
    
    if(count($res) > 0) {
        foreach($res as $row) {
            echo "Duplicate email: {$row->email}";
        }
    } else {
        // Do insert
    }
    

    【讨论】:

    • 在临时表中插入 csv 电子邮件 ID,然后使用 IN 查询执行比较操作将花费大量时间,并且当它包含接近 100 个 id 时从不使用 IN 运算符,它的不良做法 bcoz IN 查询实际上看起来像这样 WHERE id = 1 或 id = 2 或 id = 3 ......
    猜你喜欢
    • 1970-01-01
    • 2011-12-02
    • 2013-09-06
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多