これは私のテーブルです:部屋と呼ばれます
+---------+---------+-----------+-------------+-------------+-------------+---------+
| room_id | room_no | room_stat | room_name | player_a_id | player_b_id | turn_of |
+---------+---------+-----------+-------------+-------------+-------------+---------+
| 1 | 1 | 0 | blah | 0 | 0 | 0 |
| 2 | 5 | 0 | second room | 0 | 0 | 0 |
| 3 | 3 | 0 | 3rd room | 0 | 0 | 0 |
| 4 | 4 | 0 | 4th room | 0 | 0 | 0 |
+---------+---------+-----------+-------------+-------------+-------------+---------+
$player_id //contains the id of the player who wants to join
#部屋のテーブル:
- player_a_id !null および player_b_id !null の場合は何も更新しません。もしも
- player_a_id = null および player_b_id !null その後、ルームセットを更新します
- player_a_id = $player_id; player_b_id = null かつ player_a_id !null の場合、ルーム セット player_b_id = $player_id を更新します。
私の現在のクエリ(JWに感謝)(編集しようとしましたが、失敗しました)。
UPDATE room
SET player_a_id = IF(player_a_id IS NULL OR player_a_id = 0 AND player_b_id != :chara_id, :chara_id, player_a_id),
player_b_id = IF(player_a_id != :chara_id AND player_b_id IS NOT NULL, :chara_id, player_b_id)
WHERE room_id = :room_id
これは良いことですが、両方が空または = 0 の場合は 2 つの列を更新します。更新したいのは1だけです。
編集:
ここにサンプル結果があります: player_id 1 が room_id 4 に参加した後:
+---------+---------+-----------+-------------+-------------+-------------+---------+
| room_id | room_no | room_stat | room_name | player_a_id | player_b_id | turn_of |
+---------+---------+-----------+-------------+-------------+-------------+---------+
| 1 | 1 | 0 | blah | 0 | 0 | 0 |
| 2 | 5 | 0 | second room | 0 | 0 | 0 |
| 3 | 3 | 0 | 3rd room | 0 | 0 | 0 |
| 4 | 4 | 0 | 4th room | 1 | 1 | 0 |
+---------+---------+-----------+-------------+-------------+-------------+---------+
両方の列がnullであるため、両方の列を更新します。1つの列のみを更新したいです。