如何在将值从一行添加到另一行后清除列值
How to clear a column value after value is added from one row to another
我正在使用 MySQL 作为我的数据库在 c# 中创建一个基于图块的游戏。目前我有一个按钮网格,每次用户单击按钮时都会更新数据库。调用的方法更新 table 并将图块上的当前玩家设置为玩家的名字。到目前为止,我可以点击遍历许多图块并更新数据库,但它会将玩家名称放在玩家点击的每个图块上。有没有一种方法可以更新行并将列设置为值,同时从先前更新的列中删除该值?
这是我的 table:
CREATE TABLE `tbl_tile` (
`tileID` INTEGER NOT NULL AUTO_INCREMENT,
`boardID` INTEGER NOT NULL,
`tileNumber` INTEGER default null,
`tilePlayer` varchar(100) default null,
PRIMARY KEY (`tileID`),
FOREIGN KEY (`boardID`) REFERENCES `tbl_board`(`boardID`) ON DELETE CASCADE
);
这是我更新 table:
的程序
drop procedure if exists UpdateDataTile;
delimiter //
create procedure UpdateDataTile(IN `username` varchar(100), `currentTile` int)
BEGIN
UPDATE `tbl_tile`
SET
`tilePlayer` = username
WHERE `tileID` = currentTile;
END//
delimiter ;
这是它目前的作用:
Data results
如您所见,每次调用该过程时,名称都会添加到新行中。我喜欢它只在当前 tileID 上显示一次名称。我相信我需要更新行并将列设置为空,但我不确定我将如何执行此操作
可能的问题解释。
初始数据:
tile
player
1
NULL
2
NULL
3
Jim
4
NULL
5
NULL
6
John
John 从方块 6 移动到方块 4。需要最终状态
tile
player
1
NULL
2
NULL
3
Jim
4
John
5
NULL
6
NULL
查询:
UPDATE gamedata t1
JOIN gamedata t2
SET t2.player = t1.player,
t1.player = NULL
WHERE t1.player = 'John' -- player name
AND t2.player IS NULL -- the tile to move to is empty
AND t2.tile = 4; -- the tile to move to
如果最终图块不为空,则不会执行移动。
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=e6ce798ff6127a1b8d2c67e908ecdaef
我正在使用 MySQL 作为我的数据库在 c# 中创建一个基于图块的游戏。目前我有一个按钮网格,每次用户单击按钮时都会更新数据库。调用的方法更新 table 并将图块上的当前玩家设置为玩家的名字。到目前为止,我可以点击遍历许多图块并更新数据库,但它会将玩家名称放在玩家点击的每个图块上。有没有一种方法可以更新行并将列设置为值,同时从先前更新的列中删除该值?
这是我的 table:
CREATE TABLE `tbl_tile` (
`tileID` INTEGER NOT NULL AUTO_INCREMENT,
`boardID` INTEGER NOT NULL,
`tileNumber` INTEGER default null,
`tilePlayer` varchar(100) default null,
PRIMARY KEY (`tileID`),
FOREIGN KEY (`boardID`) REFERENCES `tbl_board`(`boardID`) ON DELETE CASCADE
);
这是我更新 table:
的程序drop procedure if exists UpdateDataTile;
delimiter //
create procedure UpdateDataTile(IN `username` varchar(100), `currentTile` int)
BEGIN
UPDATE `tbl_tile`
SET
`tilePlayer` = username
WHERE `tileID` = currentTile;
END//
delimiter ;
这是它目前的作用:
Data results
如您所见,每次调用该过程时,名称都会添加到新行中。我喜欢它只在当前 tileID 上显示一次名称。我相信我需要更新行并将列设置为空,但我不确定我将如何执行此操作
可能的问题解释。
初始数据:
tile | player |
---|---|
1 | NULL |
2 | NULL |
3 | Jim |
4 | NULL |
5 | NULL |
6 | John |
John 从方块 6 移动到方块 4。需要最终状态
tile | player |
---|---|
1 | NULL |
2 | NULL |
3 | Jim |
4 | John |
5 | NULL |
6 | NULL |
查询:
UPDATE gamedata t1
JOIN gamedata t2
SET t2.player = t1.player,
t1.player = NULL
WHERE t1.player = 'John' -- player name
AND t2.player IS NULL -- the tile to move to is empty
AND t2.tile = 4; -- the tile to move to
如果最终图块不为空,则不会执行移动。
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=e6ce798ff6127a1b8d2c67e908ecdaef