【发布时间】:2021-07-16 08:36:41
【问题描述】:
我正在使用 MySQL 作为我的数据库在 c# 中创建一个基于图块的游戏。目前,我有一个按钮网格,每次用户单击按钮时都会更新数据库。调用的方法更新表并将图块上的当前玩家设置为玩家的名称。到目前为止,我可以单击遍历许多图块并更新数据库,但它会将玩家名称放在玩家单击的每个图块上。有没有一种方法可以更新行并将列设置为值,同时从先前更新的列中删除该值?
这是我的桌子:
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
);
这是我更新表格的过程:
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 ;
这是它目前所做的:
如您所见,每次调用该过程时,该名称都会添加到一个新行中。我希望它只在当前 tileID 上显示一次名称。我相信我需要更新行并将列设置为空,但我不确定我会如何做到这一点
【问题讨论】:
-
提供初始样本数据作为 INSERT INTO(3-5 行)。然后提供数据更改信息并显示所需的最终数据状态。
-
我有一个简单的过程,它插入 tbl_tile 71 次,tilePlayer 的默认值为 null。在调用上述过程之前,所有行都显示为 null。然后,这会根据 currentTile 更新单行。每次 currentTile 更新时,都会调用存储过程。我试图弄清楚如何更新以前修改为空的行。期望的结果将显示有 71 行,其中一个有用户名,而其余的为 null
-
数据结果链接有一张图片,因为我无法上传一张以我目前的声誉为背景的图片
-
没有写答案,因为我缺乏 mysql 经验,但在 sql server 中类似于:a) 更改 WHERE 以使更新结果包括新值和以前的值
WHERE tileID = currentTile OR tilePlayer = username和b) 更改 SET,使其同时进行清理和分配SET tilePlayer = CASE WHEN tiIeId = currentTile THEN userName ELSE NULL END
标签: c# mysql stored-procedures