ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2019-12-01 01:26:48  阅读:196  来源: 互联网

标签:sql-update mysql php


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

我有一个表,我称为候选人表,其中包含候选人表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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有