mysql - 如何通过一个查询更新多行?

标签 mysql sql sql-update

我有这张表:

// user
+----+----------+---------------------+-------------+
| id |   name   |       email         |  reputation |
+----+----------+---------------------+-------------+
| 1  | Jack     | <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="214b40424a101361464e4e464d440f424e4c" rel="noreferrer noopener nofollow">[email protected]</a>   | 10          |
| 2  | John     | <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="feb4a1cfcdcacdbe87939f9792d09d9193" rel="noreferrer noopener nofollow">[email protected]</a>    | 1423        |
| 3  | Ali      | <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="42737b7b70032e2b023b232a2d2d6c212d2f" rel="noreferrer noopener nofollow">[email protected]</a>   | 322         |
| 4  | Peter    | <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="22520c171662454f434b4e0c414d4f" rel="noreferrer noopener nofollow">[email protected]</a>      | 950         |
+----+----------+---------------------+-------------+

我还有两个身份证号码。 $op$user。我想加上 2 (对于 $op)和 15 (对于 $user)的当前声誉。所以这是预期的输出:

$op = 3;
$user = 1;

// user
+----+----------+---------------------+-------------+
| id |   name   |       email         |  reputation |
+----+----------+---------------------+-------------+
| 1  | Jack     | <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="89e3e8eae2b8bbc9eee6e6eee5eca7eae6e4" rel="noreferrer noopener nofollow">[email protected]</a>   | 25          |
| 2  | John     | <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="450f1a74767176053c28242c296b262a28" rel="noreferrer noopener nofollow">[email protected]</a>    | 1423        |
| 3  | Ali      | <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ebdad2d2d9aa8782ab928a838484c5888486" rel="noreferrer noopener nofollow">[email protected]</a>   | 324         |
| 4  | Peter    | <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d2a2fce7e692b5bfb3bbbefcb1bdbf" rel="noreferrer noopener nofollow">[email protected]</a>      | 950         |
+----+----------+---------------------+-------------+

如何通过一个查询来做到这一点?


我可以通过两个单独的查询来做到这一点:

UPDATE user SET reputation = reputation + 2 WHERE id = :op
UPDATE user SET reputation = reputation + 15 WHERE id = :user

最佳答案

为什么不尝试:

UPDATE user SET reputation = reputation + (CASE id WHEN :op THEN 2 WHEN :user THEN 15 ELSE 0 END) WHERE user in (:user, :op)

关于mysql - 如何通过一个查询更新多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37617378/

相关文章:

MySQL - ON 更新 CASCADE + foreign_key_checks = 0

MySQL 查询以识别与特定模式的近似重复匹配,更新子表

按连续外键​​值分组的 MySQL 查询

android - Room DB升级需要编写完整的插入查询

sql - 如何使用 PIVOT 根据日期排列数据

Mysql将列名从 "group"更改为 "group_code"

PHP mysql条件唯一约束?

mysql - yii 中的 CDbcriteria.?

mysql - 触发器只允许租车最多 7 天 Max

mysql - 联合查询返回意外结果