0

私は小さなゲームのマッチメイキング システムを構築しています。対戦相手を探しているすべてのプレイヤーを保存するテーブルは次のようになります。

lobby
----------
userID
points
range
opponentID

スクリプトは 5 秒ごとに、特定のポイント範囲内で対戦相手を見つけようとします。

UPDATE lobby SET
    opponentID = {myUserID}
WHERE points >= {myPoints} - {myRange} AND points <= {myPoints} + {myRange}
    AND opponentID = 0 AND userID != {myUserID}
ORDER BY ABS(points - {myPoints}) ASC
LIMIT 1

影響を受ける行がある場合は、現在のプレイヤーをロビーから削除し、対戦相手の ID を取得します。

DELETE FROM lobby
WHERE userID = {myUserID}

SELECT userID FROM lobby
WHERE opponentID = {myUserID}

今私の恐れは、UPDATE と DELETE の間に誰かが現在のユーザーを割り当てることです。どうすればこれを防ぐことができますか? UPDATE と DELETE を組み合わせることはできますか?

4

0 に答える 0