视频游戏存在2个阶段:设置和游戏性。玩家可以使用设置来改变数据库,这会影响游戏性。然而,设置的一些功能必须考虑设置的其他功能,当与数据库交互时,因此必须根据数据库中的其他因素来改变执行语句。
例如:
在设置中,玩家可以选择启用或禁用称为"复杂商务"的设置,其在表"建筑物"中创建ID为"BUILDING_WAYSTATION"和"BUILDING_MINT"的新行,以及数据库中的许多其它改变。玩家可以选择启用称为"更容易商务"的第二设置,其更新表"ModiferArguments",增加通过许多键约束与"BUILDING_MARKET"相关联的列ID的列"VALUE"中的值(这将永远存在,无论什么)在表"建筑物"。但是,如果"复杂的商业"被启用,那么我们将希望改变更新列"价值"不同的市场,以及由"复杂商业"设置插入物引入的其它建筑物。
是否可以在SQLite语句中执行这种逻辑交互?
代码尝试:
IF
(
EXISTS
(
SELECT
*
FROM
Buildings
WHERE
BuildingType = 'BUILDING_WAYSTATION'
;
)
)
THEN
(
Update
ModifierArguments
SET
Value = Value+1
WHERE
ModifierID = 'MARKET_TRADE_ROUTE_CAPACITY'
;
Update
ModifierArguments
SET
Value = Value+2
WHERE
ModifierID = 'MINT_TRADE_ROUTE_CAPACITY'
;
Update
ModifierArguments
SET
Value = Value+3
WHERE
ModifierID = 'WAYSTATION_TRADE_ROUTE_CAPACITY'
;
)
ELSE
(
Update
ModifierArguments
SET
Value = Value+2
WHERE
ModifierID = 'MARKET_TRADE_ROUTE_CAPACITY'
)
;
我非常抱歉的眼睛疼痛的格式,但我想确保我正在尝试做的逻辑是尽可能清楚。
代码理论:
使用IF和EXISTS,我们可以简单地通过查看是否存在ID为"BUILDING_WAYSTATION"的"Building"表条目行来查看数据库中是否发生了数据库更新的"复杂商务"集合.这允许选择针对"更容易商务"的设置执行哪一组UPDATE.如果"复杂商务"尚未被启用,则我们只需要将单个值更新为"2"。然而,如果它已被启用,则该单个值必须改为更新为"1",并且我们必须更新否则将不存在的其它值。
或者:
我已经考虑过使用CASE,但我不确定它是否能够实现同样的目的,只是简单地用IF替换CASE WHEN。我也考虑过使用iif(),但也有同样的问题,因为除了在显示时替换SELECT语句的返回数据外,它似乎不适合其他目的。
1条答案
按热度按时间tcbh2hod1#
可以使用
CASE
表达式来应用逻辑: