gpt4 book ai didi

mysql - Arma 2 DayZ Epoch SQL 尸体清理器

转载 作者:行者123 更新时间:2023-11-29 03:23:37 25 4
gpt4 key购买 nike

我一直在尝试找出一种方法来做类似 Delete all records except the most recent one? 的事情但我一直无法将其应用于我的情况。

我的情况: https://gyazo.com/178b2493e42aa4ec4e1a9ce0cbdb95d3

SELECT * FROM dayz_epoch.character_data;

CharacterID, PlayerUID, InstanceID, Datestamp, LastLogin, Alive, Generation

5 |76561198068668633|11|2016-05-31 18:21:37|2016-06-01 15:58:03|0|1
6 |76561198068668633|11|2016-06-01 15:58:20|2016-10-08 21:30:36|0|2
7 |76561198068668633|11|2016-10-08 21:30:52|2016-10-09 18:59:07|1|3
9 |76561198010759031|11|2016-10-08 21:48:32|2016-10-08 21:53:31|0|2
10|76561198010759031|11|2016-10-08 21:53:55|2016-10-09 19:07:28|1|3

(看上图)所以我目前正在尝试为我的 DayZ Epoch 服务器创建一个更好的方法来从我的数据库中删除尸体。如果同一个 PlayerUID 有另一个 ALIVE = 1 的实例,我需要一个代码来删除 Where ALIVE = 0。

代码可以做的另一件事是删除除每个 PlayerUID 的最近玩家之外的所有玩家。我希望这是有道理的。很难解释。第一个链接对我来说解释得更好。

但基本上,我想删除所有现在拥有具有相同 PlayerUID 的活着玩家的死亡玩家。如果我更擅长编码,我可以看到许多我可以使用的变量,例如 PlayerUID(必须)、Datestamp、Alive 和 generation。可能只需要其中的两个,一个是 PlayerUID。

非常感谢。

对我来说最简单的似乎是这样的:按 PlayerUID 排序并删除每个 PlayerUID 的所有内容,除了(?)最新的日期戳。如果他们在调用此脚本之前没有创建新角色,这将使玩家的统计数据不在他们的尸体中。

最佳答案

所以基本上,您需要确保在玩家的插入(或将 ALIVE 更新为 1)时,您删除了所有先前的(以防万一,通常应该只有一个)与该玩家具有相同 PlayerUID 的玩家新的。

最简单的方法是创建一个触发器,该触发器将在插入之前运行(如果可以的话,在 UPDATE 时将 ALIVE 更新为 1 以恢复一个)。使用新播放器的 UID 在特定 UID 的表上运行删除。就是这么简单;)

对于触发器,这应该是这样的

Create trigger CLEAR_PLAYER 
before insert on dayz_epoch.character_data
For Each Row
Delete from dayz_epoch.character_data
where PlayerUID = NEW.PlayerUID
and Alive = 0 --Just in case, but what will happen if there where a line with Alive = 1 ?

这将在插入表 dayz_epoch.character_data 之前执行
(所以不要删除新的)。这将删除具有插入行的 PlayerUID 的每一行。如果您想增加一些安全性,您可以在条件中添加 and Alive= 0

编辑:

好久没写trigger了,我用的是official doc提醒一句。有需要的可以看看。

关于mysql - Arma 2 DayZ Epoch SQL 尸体清理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39971004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com