J'essaie de mettre à jour ma table comme ceci:
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
Je peux faire une foreach()
mais cela enverra plus de 50 requêtes distinctes, ce qui est très lent. C'est pourquoi je veux qu'il soit combiné en 1 grande requête.
(J'utilise un id pour chaque ligne mais la combinaison de game_id , x et y est ce que j'utilise pour identifier la ligne dont j'ai besoin .)
La fonction update_batch () de codeIgniter décrite ici: Mettre à jour le lot avec CodeIgniter était utile et presque parfaite mais elle ne permet qu'une seule clause where, vous ne pouvez pas (pour autant que j'ai compris et essayé) entrer un tableau avec plusieurs clauses where.
J'ai également vérifié cette question: MYSQL UPDATE SET sur la même colonne mais avec plusieurs clauses WHERE Mais cela ne permet que des mises à jour de plusieurs lignes contenant uniquement une seule clause WHERE différente et j'ai besoin de plusieurs clauses WHERE! :)
Les réponses peuvent être en SQL simple ou avec l'utilisation de php (et CodeIgniter) ou d'une manière différente. J'aimerais que ce problème soit résolu de toutes les manières possibles;)
Je peux vraiment utiliser les conseils/l'aide! = D
essayez ceci en utilisant 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.