我在分配任务时遇到了一些问题。
我有这个旧的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 标识)
我需要做的是更新记录,以便字段免责声明1 ,免责声明2 ,性别, dob 对于与其他list_id注册的相同电子邮件,特定 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 33更新带有list_id 1记录的正确值的记录?
我正在使用PHP,我相信在循环中运行更新查询是不好的做法。该表有大约610000条记录。
希望有人能给我一些关于如何完成这项任务的见解。
谢谢, 马里奥
答案 0 :(得分: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电子邮件地址的条目。