PHP MySQL : Update incremental where condition can be duplicated

标签 php mysql

我有这样的声明:

UPDATE `MyTable` 
SET point = point + 1 
WHERE (mySubject = 'MATHEMATICS' AND myGrade = '100') OR 
      (mySubject = 'PHYSICS' AND myGrade = '75') OR 
      (mySubject = 'PHYSICS' AND myGrade = '75')

我希望将表格更新为:

MATHEMATICS | 100 |  1
PHYSICS     | 75  |  2

而不是

PHYSICS     | 75  | 1

之所以存在重复的“PHYSICS”条件,是因为我从另一个函数获取此信息。 我想知道如果其他函数将 PHYSICS 传递给我 2 次,我是否可以将 PHYSICS 点增加 2。

有没有一种方法可以在一个连接中执行此操作,而不是调用 UPDATE 3 次:

UPDATE `MyTable` SET point = point + 1 WHERE mySubject = 'MATHEMATICS' AND myGrade = '100'
UPDATE `MyTable` SET point = point + 1 WHERE mySubject = 'PHYSICS' AND myGrade = '75'
UPDATE `MyTable` SET point = point + 1 WHERE mySubject = 'PHYSICS' AND myGrade = '75'

最佳答案

当您对表进行更新时,每行仅一次.. 所以它不会为物理生成 2 个更新...

    UPDATE `MyTable` 
SET point = point + 1 
WHERE (mySubject = 'MATHEMATICS' AND myGrade = '100') OR 
      (mySubject = 'PHYSICS' AND myGrade = '75') OR 
      (mySubject = 'PHYSICS' AND myGrade = '75')

这个查询对 SQL 来说.. 为我更新 MyTable WHERE 中的所有行(情况 a)或(情况 b)或(情况 c)

SQL 需要数学,并且在情况 a 中它可以并更新。 然后需要物理,在情况 b 中它们正常并更新,然后 sql 完成,因为表中没有更多的行..

您必须进行 2 个单独的更新才能完成您的工作..

UPDATE `MyTable` SET point = point + 1 WHERE mySubject = 'MATHEMATICS';
UPDATE `MyTable` SET point = point + 2 WHERE mySubject = 'PHYSICS';

或者你可以使用CASE

UPDATE  `MyTable` SET point = 
        CASE
        WHEN mySubject = 'MATHEMATICS' THEN
                (point+1)
        WHEN mySubject = 'PHYSICS' THEN
                (point+2)
        END

关于PHP MySQL : Update incremental where condition can be duplicated,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13061474/

相关文章:

javascript - 如何从 php json 编码生成这个 javascript 对象

javascript - jsp中的动态依赖选择框 HELP pls

php - 查询未插入数据没有错误

PHP 和 MySQL : PHP filtering query from database over a list

php - 你能加载一个带有 JS 超时的 PHP 包含文件吗?

mysql - 在数据库中的一组记录上存储排序顺序的最有效方法是什么?

mysql - 区分与求和

Mysql创建名称中带有特殊字符的数据库

php - Laravel 中 AJAX POST 请求后出现 422 无法处理的实体错误

php - mysql,日期输入全为0?