23

次のようにテーブルを更新しようとしています。

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_idxyの組み合わせを使用します。)

ここで説明されている codeIgniter の update_batch() 関数: Update batch with CodeIgniter は役に立ち、ほぼ完璧でしたが、1 つの where 句しか許可されません。

私はこの質問もチェックアウトしました: MYSQL UPDATE SET on the Same Column but with multiple WHERE Clauses しかし、単一の異なる WHERE 句のみを含む複数の行の更新のみが許可され、複数の WHERE 句が必要です! :)

Anwsers は、単純な SQL にすることも、php (および CodeIgniter) を使用することも、別の方法にすることもできます。この問題を可能な限り解決したいと思います;)

私は本当にアドバイス/ヘルプを使用できます! =D

4

1 に答える 1

49

を使用してこれを試してください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.
于 2013-03-11T16:58:27.323 に答える