php mysql 多行_php-更新MySQL中的多行而没有循环

我正在尝试为我创建的求职网站编写电子邮件通知系统,目前正在寻找将一定数量的工作分组在一起的方法,然后再向候选人发送电子邮件

我有一个表,我称为候选人表,其中包含候选人表ID,工作表ID和“通过电子邮件发送”的布尔值

我正在努力的是在发布新作业并发送电子邮件时更新该表.到目前为止,发布新作业时,我运行以下命令:

SELECT c2j.candidate_id, c2j.job_id, j.title

FROM " . DB_PREFIX . "candidate_to_job c2j

LEFT JOIN " . DB_PREFIX . "job j

ON (j.job_id = c2j.job_id)

WHERE c2j.emailed = 0

然后通过PHP将它们全部组合在一起,因此我得到一个看起来像这样的数组:

$candidates = array(

1 => array(1,2,3),

2 => array(1,3),

3 => array(4,5,6)

);

数组键是候选ID,值是作业ID的数组

我想使用该数组执行的操作-在发送电子邮件之后-将通过电子邮件发送的候选人候选表设置更新为true,例如,将对job_ids 1、2和3通过电子邮件将候选人候选ID设置为true

有没有一种方法可以在一个查询中做到这一点?我查看了WHEN CASE语句,但我认为在这种情况下不适用吗?我真的不想为每个候选人运行多个查询,因为可能有数千个!

解决方法:

您可以为每个组运行一个UPDATE查询,前提是该组可以共享相同的WHERE条件和相同的更新值.

UPDATE tbl SET value = TRUE WHERE id IN(1,2,3,4,5,6);

UPDATE tbl SET value = FALSE WHERE id IN(7,8,9,10,11);

或者,只要条件足够简单,就可以使用WHEN子句,甚至可以使用某些IF子句.

UPDATE tbl SET value = IF(id = 1) WHERE id IN(1,2);

UPDATE tbl

SET value = CASE

WHEN id IN (1,2,3,4,5,6) THEN TRUE

WHEN id IN (7,8,9,10,11) THEN FALSE

ELSE value

END

WHERE id IN (1,2,3,4,5,6,7,8,9,10,11);

如果可能有成千上万的WHEN案例,可能很难构建/更改,那么我会选择第一种方法:

翻转旧的key => value数组,并保持所有ID连接到一个值:

foreach($list AS $id => $value) {

$list2[$value][] = $id;

}

遍历value => keys数组并构建UPDATE查询,该查询可以一次批量更新所有键的值.

标签:sql-update,mysql,php

来源: https://codeday.me/bug/20191201/2077285.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值