MySQL 查询通过第二个表中链接的数据设置列中的唯一编号

标签 mysql join set

我会尽可能简单地解释这一点。

概述:

这是用于游戏服务器的。游戏中的角色有普通元素,还有带有属性的装备。我想给某些特殊设备一个唯一的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/

相关文章:

swift - 为什么 Set#intersection 在传递序列而不是集合时表现不同?

java - 在 Java 中查找笛卡尔积

sql - 将聚簇索引应用于 SQL Server 2012 中的 View

java - 使用可连接的两个表的 JPA 映射以及何时使用可连接

python - 在 SQLAlchemy/Flask 中加入多个表

mysql - 解释命令用法

python - 如果参数是一个集合,为什么 union 会消耗更多内存?

mysql - 从mysql中获取记录,如果我们不带空格输入但我们得到带空格的记录

php - 从多个表中计算不同的用户 ID

PHP 上传系统未将文件从临时目录移动到指定目录