次のようにテーブルを更新しようとしています:
_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_idの組み合わせ、xおよびyは、必要な行を識別するために使用するものです。)
ここで説明されているcodeIgniterのupdate_batch()関数: CodeIgniterを使用したバッチの更新 は役に立ち、ほぼ完璧ですが、1つのwhere句しか許可されないため、(私が理解して試した限り)配列を入力できません複数のwhere句を使用します。
私もこの質問を確認しました: 同じ列にMYSQL UPDATE SETが複数のWHERE句がある場合 ただし、単一の異なるWHERE句のみを含む複数の行の更新のみが可能であり、複数のWHERE句が必要です! :)
アンサーは、単純なSQLで、またはphp(およびCodeIgniter)を使用して、または別の方法で使用できます。私はこの問題を可能な限り解決したいと思います;)
私は本当にアドバイス/ヘルプを使うことができます! = D
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.