Я разрабатываю игру для двух игроков на Android, в которой используется таблица MySQL под названием «игры» для отслеживания игр и назначенных им игроков.Его структура выглядит следующим образом:
структура таблицы «игр»
Логика, которую я использую для подключения игроков: 1) Искать неполные игры (т.е. где isGameComplete= 0) и посмотрите, есть ли в любом из них player1, не установленный для него (т. Е. Где player1_id = null и player2_id! = Null).Если найден, назначьте присоединяющегося игрока к этой игре, установив его идентификатор вместо player1_id.
2) Найдите неполные игры (например, где isGameComplete = 0) и посмотрите, есть ли для них установлен player2 (то есть где player2_id = null AND player1_id! = Null).Если найден какой-либо игрок, назначьте присоединяющегося игрока к этой игре, установив его идентификатор вместо player2_id.
3) Если оба вышеуказанных случая потерпели неудачу, сделайте новую запись в таблице игр и установите player1_id = идентификатор присоединяющегося игрока.
Я сделал хранимую процедуру из PhpMyAdmin, которую я вызываю через серверный скрипт, как только игрок запускает игру для выполнения вышеупомянутой логики.
Begin
Set @gameId = -1;
Set @player1empty = -1;
Set @player2empty = -1;
SET @player1empty = (SELECT COUNT(*) FROM games WHERE player1_id is NULL AND player2_id is NOT NULL AND isGameComplete=0 LIMIT 1);
SET @player2empty = (SELECT COUNT(*) FROM games WHERE player2_id is NULL AND player1_id is NOT NULL AND isGameComplete=0 LIMIT 1);
CASE
WHEN @player1empty=1 THEN
UPDATE games SET player1_id = userId, id =(@gameId:=id ) WHERE player1_id is NULL AND isGameComplete=0 LIMIT 1;
Set joinedGame = @gameId;
WHEN @player2empty=1 THEN
UPDATE games SET player2_id = userId, id =(@gameId:=id ) WHERE player2_id is NULL AND isGameComplete=0 LIMIT 1;
Set joinedGame = @gameId;
ELSE
Insert into games (player1_id,gameType_id) Values (userId,8);
Set joinedGame = last_insert_id();
end CASE;
END
Однако по некоторым причинамновый игрок всегда добавляется в новую запись игры как Player1, даже если в player2_id в неполной игре есть NULL.Я попытался запустить запрос Count отдельно, и он возвращает значение 1 для нулевых случаев игрока 1 и игрока 2.Любая помощь будет оценена!И посоветуйте, как избежать подобных проблем в будущем.Спасибо!