2013-03-11 44 views
16

我试图更新我的表是这样的:更新多“其中”条款多行对每个单排

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_idXÿ的组合是什么,我用它来确定我需要的行。)

的update_batch()函数从这里描述的codeIgniter: Update batch with CodeIgniter 是有帮助和几乎完美的,但它只允许1单where子句,你不能(据我了解和尝试)输入一个数组与多个where子句。

我也检查了这个问题: MYSQL UPDATE SET on the Same Column but with multiple WHERE Clauses 但它只允许多个行更新只包含一个不同的WHERE子句,我需要多个WHERE子句! :)

Anwsers可以在简单的SQL或使用PHP(和CodeIgniter)或以不同的方式。我会以任何可能的方式解决这个问题;)

我真的可以使用advice/help! = d

回答

39

让这个尝试通过使用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. 
+0

谢谢!我现在就去试试吧! – Dex 2013-03-11 17:05:32

+0

一定要先备份你的数据库':D' – 2013-03-11 17:05:56

+1

它的工作表示感谢,你是我的英雄! =) – Dex 2013-03-11 19:04:10