更新多“其中”条款多行对每个单排(Update multiple rows with multipl

2019-07-21 08:58发布

我想更新我的表是这样的:

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个大的查询。

(我使用的每一行,但game_id,xy的组合的ID是什么我用它来确定我需要的行。)

这里所描述的笨的update_batch()函数: 更新批量使用CodeIgniter是有益的和近乎完美的,但只允许1个单where子句中,你不能(就我的理解,并试图)与多个where子句输入数组。

我也检查了这个问题: MYSQL更新集在同一列,但与多个WHERE子句 ,但只允许一个只包含不同的多行更新WHERE子句和我需要多个WHERE子句! :)

Anwsers可以是简单的SQL或使用PHP(和笨)的或以不同的方式。 我想这个问题,以任何可能的方式来解决;)

我真的可以使用的意见/帮助! = d

Answer 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.


文章来源: Update multiple rows with multiple 'where' clauses for each individual row