MySQL +根据一行的值更新行

时间:2017-02-09 22:32:44

标签: php mysql

我有几个不同的网站,用户可以订阅我的简报。我使用sendy作为我的新闻通讯,我遇到了一些问题。 Sendy的db结构允许多次在db中使用相同的电子邮件地址。每封电子邮件都有自己的ID,唯一ID和列表ID,这是问题的一部分 当有人从不同的网站注册时,他们会转到不同的列表 如果有人从一个列表ID取消订阅,则该记录将获得< 1'的取消值。我想在数据库中更新其电子邮件地址的所有实例,其值为' 0' (如果他们从不同的网站注册)他们的电子邮件的所有实例都有' 1'
我已经看了下面的答案,但似乎无法正确地回答问题。
mysql - UPDATEing row based on other rows
Updating rows based on other rows in the same table
这是结构的一部分

Name    Type           Attributes   Null    Default Extra
id      int(11)        UNSIGNED     No      None    AUTO_INCREMENT
email   varchar(100)                Yes     NULL    
list    int(11)                     Yes     NULL    

这是我正在寻找的一个例子

id email          list unsubscribed
1  test@test.com  1    1
2  test@test.com  2    0
3  test@test.com  3    0

我需要确定电子邮件地址的取消订阅值为' 1'那么该电子邮件地址的所有其他出现都有一个' 0'更新为' 1'
这应该在php中完成,还是可以在MySql中自动完成?

2 个答案:

答案 0 :(得分:3)

编写一个子查询,查找包含unsubscribed = 1的所有电子邮件。将其加入原始表格以查找具有相同电子邮件的所有其他行,并将它们设置为1

UPDATE YourTable AS t1
JOIN (SELECT DISTINCT email
      FROM YourTable
      WHERE unsubscribed = 1) AS t2
ON t1.email = t2.email
SET t1.unsubscribed = 1
WHERE t1.unsubscribed = 0

答案 1 :(得分:0)

我的猜测是(我没有测试这个查询,所以要温柔):

{{1}}