如果值在其他表中相等,则更新一个表

时间:2017-04-05 11:57:55

标签: php mysql

这次我可能试图达到太高,但我希望能够做到这一点。我有一个名为 liga 的表格,如下所示:

uid  |  name  |  games  |  points  |
___________________________________
1    | Daniel |    0    |    0     |
2    | Mikkel |    0    |    0     |

uid 用户ID 的缩写。 然后我有一个名为 kamp2 的表格,如下所示:

uid  |  k1    |  k1r    |  k2   |  k2r   |  week  |
__________________________________________________
1    |  1     |  2-1    |  X    |  2-2   |  14    |
2    |  2     |  1-1    |  1    |  2-1   |  14    |

这些数据由用户提交(附在 uid 上)。
现在,我想要的是一个表格,在那里我写了一个足球比赛的结果,如:

<input type="text" name="k1">... and so on...

......然后我应该写出正确的结果。那么,就我的实际问题而言:
假设第一场比赛(k1 =胜利者(1X2)和k1r =结果)是2-1,我希望用以下内容更新 liga -table的表格: / p>

If (k1 == 1 AND k1r == 2-1) UPDATE liga SET point = point + 5 WHERE uid = $uid;
else if 
(k1r == 2-1 AND k1 != 1) UPDATE liga SET point = point + 3 WHERE uid = $uid ;
else if 
(k1 == 1 AND k1r != 2-1) UPDATE liga SET point = point + 1 WHERE uid = $uid ;

但这怎么可能?我应该首先选择 kamp2 表,然后使用它或者JOIN两个表或者如何使用它? 如果这个问题太“大”无法回答,请告诉我:)我不希望你给我确切的代码,只是为了指导我:) 希望没关系!

3 个答案:

答案 0 :(得分:2)

您可以将表连接在一起,然后使用CASE逻辑进行更新:

UPDATE liga l JOIN
       kamp2 k
       ON l.uid = k.uid
    SET point = (CASE WHEN k.k1 = '1' and k.k1r = '2-1' THEN point + 5
                      WHEN k.k1r = '2-1' AND k.k1 <> '1' THEN point + 3 
                      WHEN k.k1 = '1' AND k.k1r <> '2-1' THEN point + 1 
                      ELSE point
                 END)
    WHERE l.uid = $uid ;

答案 1 :(得分:0)

你也不能用条件更新同一条记录。

您需要使用子查询来更新它。

  

UPDATE data_table t,(SELECT DISTINCT ID,NAME,VALUE                           FROM data_table                          VALUE不是NULL和VALUE!='')t1 SET t.VALUE = t1.VALUE WHERE t.ID = t1.ID AND t.NAME = t1.NAME

答案 2 :(得分:0)

您可以使用触发器的概念来完成此任务:

https://www.sitepoint.com/how-to-create-mysql-triggers/

您必须在 kamp2 表格上创建一个更新后/插入触发器,并在该触发器中更新 liga 表格

或者通过后端php脚本来处理它。