无法理解如何创建Join&需要查询

时间:2017-01-05 07:54:45

标签: mysql

所以,我想我应该用Join & Require Query来解释我的意思,因为这可能不是正确的术语。对于这个问题,我设置了一个非常简单的表格子集,这些表格不属于视频游戏的线框。我提前道歉,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);

在这个例子中,我设置了一个非常简约的游戏制作系统示例,其中制作的项目需要其他项目。

我需要创建一个查询,我可以根据crafteditems表中提取所有可用值。例如,根据上面的数据,我会做以下事情:

requestCraftableItems(itemArray) {
    // Execute query based on array here
};

requestCraftableItems([1, 2, 3])

这应该执行一个查询,说明用户有项目1, 3, & 4,并尝试找到crafted条目,其中项目中满足reqs.item_id的所有reqs.crafted_id阵列。在此示例中,不应返回任何内容,因为固化皮革的crafted_id需要1 & 3项,tea的crafted_id需要项目1

因此,如果用户执行了以下操作:

requestCraftableItems([1, 3, 4]);

当用户向查询提供Cured Leather时,它应返回Tea AND 1 & 3的精心设计的条目。

这不是我原来的用例,只是一个例子来说明我试图在非常简单的范围内做的事情。

编辑:要克服,如果将值(1)传递给查询,Cured Leather不应出现在结果中,因为Cured Leather要求1和3。

1 个答案:

答案 0 :(得分:0)

我可能误解了你要找的东西,但简单的连接应该返回你想要的结果:

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

这将返回示例中的结果。

未经测试,可能包含拼写错误