php - 如何避免在嵌套循环中执行 mysql 查询?

标签 php mysql

我在执行分配给我的任务时遇到了一些问题。

我有这个旧的 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 标识)

我需要做的是更新记录,以便字段 disclaimer1disclaimer2genderdob特定 list_idregion 对于使用其他 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/

相关文章:

php代码被写入以纯文本形式输出,为什么?

mysql - 使用外键时以百分比形式获取结果

php - 具有附加函数和传递参数的 Laravel 模型

mysql触发查询。这是对的吗?

php - 去掉PHP中两个单词之间的空格

php - 使用 Telegram Bot PHP sendMediaGroup 方法

php - MAMP 尝试连接到生产 SQL 数据库 - localhost PHP Google App Engine 灵活不工作

php - 脚本显示进度 php

带有where子句的M​​ysql子查询

python - 1054, 'field list' 中的未知列