因此,我想我应该解释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);
在此示例中,我设置了游戏中制作系统的非常简单的示例,其中制作的物品需要其他物品。
我需要创建一个查询,在该查询中可以根据自己拥有的
crafted
从items
表中提取所有可用值。例如,根据上面的数据,我将执行以下操作: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
和1 & 3
的精心制作的条目。这不是我最初的用例,仅是一个示例,可以很简单地了解我正在尝试做的事情。
编辑:为了聪明起见,如果将值(1)传递给查询,则
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
这将返回示例中的结果。
未经测试,可能包含错别字