我有几个不同的网站,用户可以订阅我的简报。我使用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中自动完成?
答案 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}}