CASE

时间:2017-04-06 05:47:26

标签: php mysql

昨天,stackoverflow的一个成员帮助我用另一个表中的case更改了我的数据库中的表。但我需要再输入一个条件,并且不知道放在哪里。我有两张桌子:
西甲

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

kamp2

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

对于那些尚未获得它的人来说,它是一个投注游戏,用户在2场比赛(k1和k2)上投注,并在两场比赛中投注(k1r和k2r)。 让我们说第一场比赛是2-1,我用:

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 = k.uid ;

它完美无缺。 Daniel 获得5分, Mikkel 获得3分。但现在我的问题。下周他们将发送另一个下注,其中周数 15 。所以我其实只想要它

UPDATE liga l JOIN
       kamp2 WHERE k.week = 15
       ......

但它不会允许这样做。我应该把条件放在哪里呢?

2 个答案:

答案 0 :(得分:2)

我不知道我是否理解你的问题,但你可以使用

l.uid = k.uid and k.week = 15

where(case1,case2)

最后一个方法是自己的mysql。

答案 1 :(得分:1)

您应该将where子句添加到结尾(另一个where子句所在的位置) 在sql中,您首先要说明要更新哪些表UPDATE table,然后使用哪些值SET field='val'更新哪些字段,最后说明应该在哪些记录中更新WHERE field=42

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 = k.uid AND k.week=15 ;