我已经做到了,但是我在问我是否可以做得更好(最好是以某种方式减少where中所有条件的数量),或者是否有一种方法需要更少的执行时间(尽管这似乎比php循环每个更新查询要快得多)。
我必须用7个主键更新一个表中的多行(生产中可能会在100-10000行之间)(是的..我几乎到了只想在表上粘贴一个主id键的地步,但是我必须返回并重新编码我的浏览器游戏的太多内容…)我不能使用insert。。因为我不应该在更新不存在时插入它(在更新之前在同一个表上做一些删除)
我当前的解决方案:
UPDATE planet_market SET
amount = CASE
WHEN resource_id=1 AND type=0 AND price=2000 AND player_id=-1 AND planet_id=1 AND owner_type=2 AND factory_id=70 THEN 1
WHEN resource_id=1 AND type=0 AND price=2700 AND player_id=-1 AND planet_id=1 AND owner_type=2 AND factory_id=161 THEN 181
ELSE amount END
WHERE (resource_id=1 AND type=0 AND price=2000 AND player_id=-1 AND planet_id=1 AND owner_type=2 AND factory_id=70) OR (resource_id=1 AND type=0 AND price=2700 AND player_id=-1 AND planet_id=1 AND owner_type=2 AND factory_id=161)
那么,有没有更好的(更短的查询)或更快的(执行)方法呢?
1条答案
按热度按时间z9ju0rcb1#
好吧,我设法找到了一种方法,大大缩短了查询,而它的工作原理几乎相同(我希望…,我有限的测试似乎执行相同的,请纠正我在这方面),所以我张贴我自己的答案。。。
下面是方法(不要介意使用的数据略有不同,注意结构的变化):
还有其他想法吗?
我希望这能帮助其他人寻找这样的解决方案(我在stackoverflow上找不到任何关于在有多个键时更新多行的信息)
我想知道是否可以在when-then中使用where(column1,column2,…)(data1,data2,…)来缩短查询。。。下一步我会检查一下(我只会缩短它,缺少“=”。。。哈哈)