我正在尝试像这样更新我的表:
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个单独的查询,这非常慢。
这就是为什么我希望将它合并为一个大查询。
(我确实为每一行使用了 id ,但 game_id , x 和 y 的组合是我用什么来识别我需要的行。)
此处描述的codeIgniter中的update_batch()函数: 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)或以不同的方式使用。我想以任何可能的方式解决这个问题;)
我真的可以使用建议/帮助! = d
答案 0 :(得分:46)
使用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.