我正在尝试像这样更新我的表:
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_id, x and y是我用来识别我需要的行的。 )
codeIgniter 中的 update_batch() 函数如下所述:使用 CodeIgniter 更新批次 https://stackoverflow.com/questions/6264955/update-batch-with-codeigniter很有帮助并且几乎完美,但它只允许 1 个 where 子句,您不能(据我理解和尝试)输入具有多个 where 子句的数组。
我也检查过这个问题:MYSQL UPDATE SET 在同一列上但具有多个 WHERE 子句 https://stackoverflow.com/questions/9368505/mysql-update-set-on-the-same-column-but-with-multiple-where-clauses但它只允许只包含一个不同的 WHERE 子句的多行更新,而我需要多个 WHERE 子句! :)
答案可以是简单的 SQL 或使用 php(和 CodeIgniter)或以不同的方式。我希望以任何可能的方式解决这个问题;)
我真的可以使用建议/帮助! =D
尝试一下使用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.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)