我在执行分配给我的任务时遇到了一些问题。
我有这个旧的 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 标识)
我需要做的是更新记录,以便字段 disclaimer1、disclaimer2、gender、dob特定 list_id 的 region 对于使用其他 list_id 注册的同一email 是相同的。
例如:
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 条记录。
希望有人能给我一些关于如何完成这项任务的见解。
谢谢, 马里奥
最佳答案
@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 电子邮件地址的条目。
关于php - 如何避免在嵌套循环中执行 mysql 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12630734/