首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >库存系统/ Quest系统的正确计数

库存系统/ Quest系统的正确计数
EN

Stack Overflow用户
提问于 2019-03-05 18:59:49
回答 1查看 40关注 0票数 0

对于随意的标题我深表歉意。但基本上是:

我允许用户继续执行存储在user_quests中的任务。任务可能会要求用户获取几个物品,这些物品会存储在user_quest_items中。

结构:

user_quests ID、用户ID、时间戳

user_quest_items ID、用户提问ID、项目ID、amount_needed

现在,我尝试运行一个查询,以确定用户的库存中是否有所需数量的商品,这样我就可以将其显示给用户。也就是说。

寻找绿色苹果2/4

我的库存系统允许同一物品的不同实例。结构:

项目ID、项目名称、描述、稀有度

item_instance ID、项目ID、special_details

清单ID、用户ID、item_instanceid、数量

所以基本上,我的查询需要计算任务所要求的物品是否在用户的库存中。我当前的查询是:

代码语言:javascript
复制
SELECT items.itemname, inventory.quantity, item_instances.ID as instanceid,
item_instances.itemid as instance_itemid, user_quest_items.itemid FROM 
user_quest_items
INNER JOIN items ON items.ID = user_quest_items.itemid
INNER JOIN user_quests ON user_quests.ID = user_quest_items.userquestid
LEFT OUTER JOIN inventory ON inventory.userid = user_quests.userid
LEFT OUTER JOIN item_instances ON item_instances.ID = inventory.item_instanceid AND item_instances.itemid = user_quest_items.itemid
WHERE user_quest_items.userquestid = 27

不幸的是,这不起作用。我假设它与inventory的左外部连接有关,但基本上它是获取用户库存中的所有项目,而不是user_quest_items要求的特定项目。

如果我将item_instances更改为INNER JOIN,这是可行的,但问题是,如果用户的必填项中有0个,则不会返回任何行,这会使用户认为他们没有被请求项。在这个用例中,我需要它说:

绿色苹果0/4

对于复杂的帖子,我深表歉意。创建inventory系统实例还有其他原因(我当然可以让它变得更简单,但对于其他机制,我需要这样做)。

EN

回答 1

Stack Overflow用户

发布于 2019-03-05 20:15:47

我不确定你怎么能包含那些不存在的项目。但是,即使没有项目,您也可以包括用户id。为此,您可以为该用户启动一系列left join

代码语言:javascript
复制
SELECT u.userquestid,
       i.itemname, iv.quantity, ii.ID as instanceid,
       ii.itemid as instance_itemid, uqi.itemid
FROM (SELECT 27 as userquestid) u LEFT JOIN
     user_quest_items uqi
     ON u.userquestid = u.userquestid LEFT JOIN
     items i
     ON i.ID = uqi.itemid LEFT JOIN
     user_quests uq
     ON uq.ID = uqi.userquestid LEFT JOIN
     inventory iv
     ON iv.userid = uq.userid LEFT JOIN
     item_instances ii
     ON ii.ID = iv.item_instanceid AND
       ii.itemid = uqi.itemid;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55001275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档