对于随意的标题我深表歉意。但基本上是:
我允许用户继续执行存储在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、数量
所以基本上,我的查询需要计算任务所要求的物品是否在用户的库存中。我当前的查询是:
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系统实例还有其他原因(我当然可以让它变得更简单,但对于其他机制,我需要这样做)。
发布于 2019-03-05 20:15:47
我不确定你怎么能包含那些不存在的项目。但是,即使没有项目,您也可以包括用户id。为此,您可以为该用户启动一系列left join:
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;https://stackoverflow.com/questions/55001275
复制相似问题