Обновление нескольких строк с несколькими предложениями "where" для каждой отдельной строки
Я пытаюсь обновить таблицу следующим образом:
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 что я использую для определения нужной строки.)
Функция update_batch() от codeIgniter, описанная здесь:
Обновить пакет с помощью CodeIgniter
был полезен и почти идеален, но он допускает только одно предложение where, вы не можете (насколько я понял и попытался) ввести массив с несколькими предложениями.
Я также проверил этот вопрос:
MYSQL UPDATE SET в том же столбце, но с несколькими предложениями WHERE
Но это разрешает только несколько обновлений строк, содержащих только одно другое предложение WHERE, и мне нужно несколько предложений WHERE!:)
Anwsers могут быть в простом SQL или с использованием php (и CodeIgniter) или иным способом. Я бы эту проблему решал любым возможным способом;)
Я действительно могу использовать совет/помощь!= D
Ответы
Ответ 1
попробуйте использовать 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.