一尘不染

使用每行的多个“ where”子句更新多行

mysql

我试图像这样更新我的表:

Update MyTable 
SET value     = 1 
WHERE game_id = 1,
      x       =-4,
      y       = 8

SET value     = 2 
WHERE game_id = 1,
      x       =-3,
      y       = 7

SET value     = 3 
WHERE game_id = 2,
      x       = 5,
      y       = 2

我可以做一个,foreach()但是会发送50多个单独的查询,这非常慢。这就是为什么我希望将其合并为1个大查询。

(我确实为每行使用一个 id ,但是 game_idxy 的组合才是我用来标识所需行的方法。)

这里描述了来自codeIgniter的update_batch()函数:
使用CodeIgniter更新批处理
是有用的,并且几乎是完美的,但是它仅允许1个单个where子句,而您(根据我的理解和尝试)不能输入带有多个where子句的数组。

我还检查了这个问题: 同一列上有多个WHERE子句的MYSQL UPDATE
SET,

但是它只允许仅包含一个不同WHERE子句的多行更新,并且我需要多个WHERE子句!:)

Anwsers可以采用简单的SQL或使用php(和CodeIgniter),也可以采用其他方式。我希望以任何可能的方式解决这个问题;)

我真的可以使用建议/帮助!= D


阅读 238

收藏
2020-05-17

共1个答案

一尘不染

尝试使用 CASE

Update  MyTable 
SET     value = CASE 
                     WHEN  game_id = 1 AND x = -4 AND y = 8 THEN 1
                     WHEN  game_id = 1 AND x = -3 AND y = 7 THEN 2
                     WHEN  game_id = 2 AND x =  5 AND y = 2 THEN 3
                     ELSE  value 
                END
WHERE   game_ID IN (1,2,3) AND  -- the purpose of this WHERE clause
        x IN (-4, -3, 5) AND    -- is to optimize the query by preventing from
        y IN (8,7,2)            -- performing full table scan.
2020-05-17