mysql - 如何选择 - 更新然后将值复制到另一个表(批量)
问题描述
我正在为我正在使用的邮件软件开发一个短链接系统,我有 2 个表:
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 t2
SET t2_status = 1
WHERE EXISTS (SELECT 1 FROM Table2 t1
WHERE t1.t2_code = t2.t2_code AND t1.t2_status = 0);
第二次更新可能需要的查询是:
UPDATE Table1 t1
INNER JOIN Table2 t2
ON t1.t2_code = t2.t2_code
SET
t1.t1_url = t2.t1_url
WHERE
t1.t2_status = 1 AND
t2.t2_status = 0 AND
t1.t1_campaign_id = 'some campaign';
推荐阅读
- c - 编写我自己的系统调用来计算字符串指针中出现了多少个 o
- php - 在链配置的命名空间中找不到类“App\Entity\Users”
- html - 子资源完整性:如何仅显示警告而不显示阻止资源?
- python - 如何在 json 对象数组中获取特定值并保存到 var
- c - 可以使用scanf阅读文本吗?
- kernel - 为什么我的终端无法读取 rpm 之类的命令?
- java - Maven 无法解决 kafka 依赖
- ruby-on-rails - Elastic Beanstalk:找不到带有可执行包 (Gem::GemNotFoundException) 的 gem bundler (>= 0.a)
- r - 如何在 pspline::smooth.Pspline R 中添加权重,相当于 MATLAB 的 csaps()
- android-studio - 未自动检测到模拟器无法连接到设备