我会尽可能简单地解释这一点。
概述:
这是用于游戏服务器的。游戏中的角色有普通元素,还有带有属性的装备。我想给某些特殊设备一个唯一的ID。即使玩家拥有两件相同的装备,每件特殊装备也应该有不同的 uniqueid。有两个与元素相关的表,库存元素,然后是库存设备。普通元素将简单地显示在库存元素表中,因为它们没有统计信息,但是设备显示在库存元素中,并且也显示在存储该元素统计信息的库存设备中。这两个表通过名为 inventoryitemid 的列链接。
我想做什么:
我想进行一个查询,它将在 inventoryitems 的 uniqueid 列中为任何具有特定统计数据的设备设置一个唯一编号。
这是一个损坏的示例查询,显然不起作用,但希望它能帮助您进一步理解我想要完成的任务......
UPDATE inventoryitems
SET inventoryitems.uniqueid = (
SELECT MAX(uniqueid)) + 1
WHERE EXISTS
(
SELECT inventoryequipment.inventoryitemid
FROM inventoryequipment
WHERE inventoryequipment.upgradeslots = 0
&& inventoryequipment.level = 0
&& inventoryequipment.str = 0
&& inventoryequipment.dex = 0
&& inventoryequipment.int = 0
&& inventoryequipment.luk = 0
&& inventoryequipment.hp = 0
&& inventoryequipment.mp = 0
&& inventoryequipment.watk = 0
&& inventoryequipment.wdef = 0
&& inventoryequipment.mdef = 0
&& inventoryequipment.acc = 0
&& inventoryequipment.hands = 0
&& inventoryequipment.speed = 0
&& inventoryequipment.jump = 0
&& inventoryequipment.ringid = -1
&& inventoryequipment.locked = 0
&& inventoryequipment.isRing = 0
);
最佳答案
明白了...
set @i=0;
UPDATE inventoryitems SET uniqueid = (@i:=@i+1) WHERE inventoryitemid IN (SELECT inventoryequipment.inventoryitemid
FROM inventoryequipment
WHERE inventoryequipment.upgradeslots = 0
&& inventoryequipment.level = 0
&& inventoryequipment.str = 0
&& inventoryequipment.dex = 0
&& inventoryequipment.int = 0
&& inventoryequipment.luk = 0
&& inventoryequipment.hp = 0
&& inventoryequipment.mp = 0
&& inventoryequipment.watk = 0
&& inventoryequipment.wdef = 0
&& inventoryequipment.mdef = 0
&& inventoryequipment.acc = 0
&& inventoryequipment.hands = 0
&& inventoryequipment.speed = 0
&& inventoryequipment.jump = 0
&& inventoryequipment.ringid = -1
&& inventoryequipment.locked = 0
&& inventoryequipment.isRing = 0);
关于MySQL 查询通过第二个表中链接的数据设置列中的唯一编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22415436/