我正在为我正在使用的邮件软件开发一个短链接系统, 我有 2 张 table :
Table1 : t1_id, t1_campaign_id, t1_email_address, t1_email_text, t1_url
Table2 : t2_id, t2_code, t2_status
我正在做的是通过 cronjob 在 Table2 中生成短代码,所以我有超过 2M 的记录, 当我想发送一封新电子邮件时,系统会用除 t1_url 之外的所有数据填充 Table1。
我想要一个将 1 t2_code 复制到 t1_url 并将 t2_status 更改为“1”的查询, t2_code 应该使用一次,并且我不能使用 t1_id = t2_id 条件,因为有些电子邮件不包含短链接。
我可以使用 PHP 循环轻松实现此目的,但我在这里处理大数字,并且我想要快速的东西。
所以,我想要实现的是:
1 - SELECT t2_code FROM Table2 WHERE t2_status = '0';
2 - UPDATE Table2 SET t2_status = '1' WHERE t2_code = "[RETURNED VALUES FROM FIRST QUERY]"
3 - UPDATE Table1 SET t1_url = '[RETURNED VALUES FROM FIRST QUERY]' WHERE t1_campaign_id = '[Example: 1]'
示例:
- TABLE1
t1_id, t1_campaign_id, t1_email_address, t1_email_text, t1_url
'217', '327', 'john@gmail.com', 'Hello How are you doing?', ''
'218', '327', 'doe@gmail.com', 'Hello How are you doing?', ''
'219', '327', 'esys@gmail.com', 'Hello How are you doing?', ''
- TABLE2
t2_id, t2_code, t2_status
'2627', 'GtSu75s', '0'
'2628', 'TY8usk2', '0'
'2629', 'HDY2i9z', '1'
'2630', 'JEYSO6s', '0'
'2630', 'KjdU8n1', '1'
'2631', 'KSYZnc8', '0'
'2632', 'jd6sjc8', '0'
我想要的结果:
- TABLE1
t1_id, t1_campaign_id, t1_email_address, t1_email_text, t1_url
'217', '327', 'john@gmail.com', 'Hello How are you doing?', 'GtSu75s'
'218', '327', 'doe@gmail.com', 'Hello How are you doing?', 'TY8usk2'
'219', '327', 'esys@gmail.com', 'Hello How are you doing?', 'JEYSO6s'
- TABLE2
t2_id, t2_code, t2_status
'2627', 'GtSu75s', '1'
'2628', 'TY8usk2', '1'
'2629', 'HDY2i9z', '1'
'2630', 'JEYSO6s', '1'
'2630', 'KjdU8n1', '1'
'2631', 'KSYZnc8', '0'
'2632', 'jd6sjc8', '0'
任何人都可以快速提出查询或方法吗?
谢谢。
最佳答案
UPDATE Table2 SET t2_status = '1' WHERE t2_code in (SELECT t2_code FROM Table2 WHERE t2_status = '0');
我想你需要这样的东西。同样的情况也适用于第二个更新语句。
关于mysql - 如何选择 - 更新然后将值复制到另一个表(批量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57704459/