我有一个带有列的表: (ID, UserID, Slot, ItemID, Quant)
可以说我有一行值: ('1', '10', '2', '35', '200');
该行的广告位值为2。我在广告资源标签中有20个广告位。我想按升序插入数据。有没有一种方法可以写查询来检查是否使用了最后一个插槽,以便可以将项目分配给下一个插槽?因此,如果已使用插槽2,则下一项将消耗插槽3。
还是有一种方法可以将多个变量与一个数值进行比较,而不必使两个变量都等于该数字,所以像
if($var1 or $var2 or $var3 == 1) {
excute this code
}
而不是执行以下操作:
if($var1 ==1) {
execute code
}
if($var2 == 1) {
execute code
}
if($var3 == 1) {
execute code
}
我讨厌成为坏消息的承担者,但是恕我直言,您的数据模型从根本上被破坏了。有两种可能的情况:
如果且仅当你永远需要访问一个单一的插槽,也就是说,如果插槽是一个封闭的实体,您应该存储序列化的时隙结构。
如果您需要对单个插槽的任何访问权限,我希望通过让一个表slots
和另一个表通过可联合使用该表来解决此问题。然后,只需重复执行一次INSERT
,即可完成使用插槽的操作,直到不再发生按键冲突(当然,还有更有效的方法)
编辑
响应@Stoic的请求,以下是关于第二个项目符号的详细说明:假定以下内容:
useritems
users
,UserID
来自(PK)items
,ItemID
它来自(PK)现在我们创建一个表 userslots
CREATE TABLE userslots (
UserID int, -- possibly some FK,
SlotNum int,
ItemId int, -- possibly some FK,
ItemCount int,
-- possibly more, as the game logic needs (Styling, etc.)
PRIMARY KEY(UserID, SlotNUm),
)
并为其中每个用户的每个插槽创建一行,其中SlotNum = 0..N和ItemID = ItemCount = 0-这也使我们也可以让不同的用户拥有不同数量的插槽。
现在,如果要插入项目,请执行两个步骤:
UPDATE userslots SET ItemCount=ItemCount+1 WHERE UserID=$UserID and ItemID=$ItemID LIMIT 1
。如果返回1个受影响的行,则操作完成。如果没有,我们需要使用新的广告位:UPDATE userslots SET ItemID=$ItemID, ItemCount=1 WHERE UserID=$UserID and ItemCount=0 LIMIT 1
。
如果我们需要删除一个Item,则只要UPDATE userslots SET ItemCount=ItemCount-1 WHERE UserID=$UserID and ItemID=$ItemID and ItemCount>0 LIMIT 1
用户完全拥有这样的项目,受影响的行数(0或1)就原子地显示给我们:如果与另一个会话不竞争,则可能导致双消耗。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句