1

我被分配的任务有点问题。

我有这个旧的 phpmynewsletter 数据库(MySQL 后端)。

基本上所有电子邮件都保存在具有以下结构的表中:

    email   varchar(255)
    list_id int(11)
    hash    varchar(255)
    disclaimer1 tinyint(1)
    disclaimer2 tinyint(1)
    gender  char(1)
    dob date
    region  varchar(50)

因此,同一封电子邮件可以在表格中多次出现,即订阅不同的时事通讯(由list_id标识)

我需要做的是更新记录,以便特定list_id的字段disclaimer1disclaimer2genderdobregion对于使用其他 list_id 注册的同一电子邮件是相同的。

例如:

    email: email1(at)gmail.com
    list_id: 1
    disclaimer1: 0
    disclaimer2: 0
    gender: M
    dob: 1975-05-02
    region: Portugal

    email: email2(at)gmail.com
    list_id: 33
    disclaimer1: 1
    disclaimer2: 0
    gender: M
    dob: 1975-05-02
    region: Portugal

如何使用 list_id 1 的记录中的正确值更新 list_id 33 的记录?

我正在使用 PHP,我认为在循环中运行更新查询是不好的做法。该表有大约 610000 条记录。

希望有人能给我一些关于如何完成这项任务的见解。

谢谢,马里奥

4

1 回答 1

3

@bigman 您发布的内容似乎是正确的,但我想问题是如何使用相同的电子邮件更改类似于 list_id: 1 的所有其他数据。

UPDATE my_table t,
 (
    SELECT
        email,
        disclaimer1,
        disclaimer2,
        gender,
        dob,
        region
    FROM
        my_table
    WHERE
        list_id = 1
) t1
SET 
 t.disclaimer1 = t1.disclaimer1,
 t.gender = t1.gender,
 t.dob = t1.dob,
 t.region = t1.region
WHERE
   t.email = t1.email

我想这应该适用于所有具有 list_id: 1 电子邮件地址的条目。

于 2012-09-27T22:28:56.003 回答