我正在尝试创建一个存储过程,该过程会随着玩家在瓷砖周围移动而更新。目前,存储过程有效,表格会随着玩家移动而更新,但我想添加多用户功能,如果列中已有值,则不会更新行。
tileID | tilePlayer |
---|---|
1 | null |
2 | null |
3 | null |
4 | Player1 |
目前我可以像这样移动到另一个图块(从 tileID 4 移动到 tileID 3):
tileID | tilePlayer |
---|---|
1 | null |
2 | null |
3 | Player1 |
4 | null |
但我想让它在有玩家时不会移动到 tileID 3
tileID | tilePlayer |
---|---|
1 | null |
2 | null |
3 | Player2 |
4 | Player1 |
所以,如果 tileID 3 = null ~ 它会更新到 player1
如果 tileID 3= player2 ~ 它不会更新并且 player2 将保持为 tileID 3 而 player1 将保持为 tileID 4
这是我更新位置的存储过程:
create procedure UpdateDataTile()
BEGIN
UPDATE tbl_tile SET tilePlayer = null WHERE tilePlayer = "player1";
UPDATE tbl_tile t
INNER JOIN
tbl_player p
ON t.tileID = p.tileID
SET t.tilePlayer = uname;
END//
delimiter ;
本质上,我想实现一个执行如下操作的语句:
create procedure UpdateDataTile(IN `uname` varchar(100), `tileVal` int)
BEGIN
If {
tbl_tile row 3 (or whatever is +1 or -1 current tilePlayer row) column tilePlayer != null {return}
}
else
DO this{
UPDATE tbl_tile SET tilePlayer = null WHERE tilePlayer = uname;
UPDATE tbl_tile t
INNER JOIN
tbl_player p
ON t.tileID = p.tileID
SET t.tilePlayer = uname;
}
END//
delimiter ;
我知道我不能像在 c# 等中那样使用 if/else 语句,但是有没有办法实现它?