如何在将值从一行添加到另一行后清除列值

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