所以,我想我应该解释一下加入并要求查询
的含义,因为这可能不是正确的术语。对于这个问题,我设置了一个非常简单的表格子集,该子集超出了视频游戏的线框范围。我提前道歉,SQLFiddle 现在无法工作。
CREATE TABLE reqs (
crafted_id INT, item_id INT );
CREATE TABLE items (
id INT, name VARCHAR(30) );
CREATE TABLE crafted (
id INT, name VARCHAR(30) );
通过这些表,我还创建了一些示例数据。我没有在这些表中使用 auto_increment,这样您可以获得更好的视觉效果。
INSERT INTO items (id, name) VALUES (1, 'Herbs');
INSERT INTO items (id, name) VALUES (2, 'Health Potion');
INSERT INTO items (id, name) VALUES (3, 'Leather');
INSERT INTO items (id, name) VALUES (4, 'Sticks');
INSERT INTO crafted (id, name) VALUES (101, 'Cured Leather');
INSERT INTO crafted (id, name) VALUES (102, 'Tea');
INSERT INTO reqs (crafted_id, item_id) VALUES (101, 1);
INSERT INTO reqs (crafted_id, item_id) VALUES (101, 3);
INSERT INTO reqs (crafted_id, item_id) VALUES (102, 1);
在此示例中,我在游戏中设置了一个非常简约的制作系统示例,其中制作的元素需要其他元素。
我需要创建一个查询,在其中我可以根据我拥有的 items
从 crafted
表中提取所有可用值。例如,根据上面的数据,我会执行以下操作:
requestCraftableItems(itemArray) {
// Execute query based on array here
};
requestCraftableItems([1, 2, 3])
这应该执行一个查询,指出用户拥有项目 1、3 和 4
,并尝试查找包含所有 reqs 的
。在此示例中,不应返回任何内容,因为固化皮革的 crafted_id 需要项目 精心制作的
条目。项目数组中满足 reqs.crafted_id
的 item_id1 和 3
,而 tea
的 crafted_id 需要项目 1
因此,如果用户执行以下操作:
requestCraftableItems([1, 3, 4]);
当用户向查询提供 1 和 3
时,它应该返回精心制作的 Cured Leather
和 Tea
条目。
这不是我最初的用例,只是一个示例,旨在以非常简单的方式说明我正在尝试做的事情。
编辑:澄清一下,如果将值 (1) 传递给查询,Cured Leather
不应出现在结果中,因为 Cured Leather 需要 1 和 3。
最佳答案
我可能误解了您要寻找的内容,但简单的联接应该返回您想要的结果:
SELECT crafted.name
FROM items
JOIN reqs
ON reqs.item_id = items.id
JOIN crafted
ON crafted.id = reqs.crafted_id
WHERE items.id in (1,3,4)
GROUP BY crafted.id
这将返回示例中的结果。
未经测试,可能包含拼写错误
关于mysql - 无法理解如何创建 Join & Require 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41479843/