복붙노트

[SQL] 각각의 행에 대해 '어디에'조항 여러 여러 행을 업데이트

SQL

각각의 행에 대해 '어디에'조항 여러 여러 행을 업데이트

나는 이런 식으로 내 테이블을 업데이트하려합니다 :

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 개 이상의 별도의 쿼리를 보낼 것입니다. 나는 그것이 하나의 큰 쿼리로 결합 할 이유입니다.

(I는 각 행의 ID 만 GAME_ID, x의 조합을 사용합니까와 y 내가 행 I의 필요성을 확인하는 데 사용하는 것입니다.)

CodeIgniter를으로부터 update_batch () 함수는 여기에 설명 : CodeIgniter의와 업데이트 배치 어디 조항 도움이 거의 완벽했다 그러나 그것은 단지 하나 하나의 where 절을 허용, 당신은 (지금까지의 내가 이해와 노력으로) 여러 배열을 입력 할 수 없습니다.

나는 또한이 질문에 체크 아웃했습니다 : 동일한 열하지만 절 WHERE 복수와 MYSQL UPDATE SET 그러나 그것은 오직 단 하나의 다른 WHERE 절을 포함하는 여러 행 업데이트 할 수 있으며 여러 개의 절을 필요로한다! :)

답변은 간단 SQL 또는 PHP (이그나이터)의 사용 또는 다른 방법으로 할 수 있습니다. 나는 가능한 모든 방법으로 해결이 문제를 거라고)

난 정말 조언 / 도움을 사용할 수 있습니다! = D

해결법

  1. ==============================

    1.CASE를 사용하여 이것을를 시도해

    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.
    
  2. from https://stackoverflow.com/questions/15344120/update-multiple-rows-with-multiple-where-clauses-for-each-individual-row by cc-by-sa and MIT license