mysql - 无法理解如何创建 Join & Require 查询

标签 mysql

所以,我想我应该解释一下加入并要求查询的含义,因为这可能不是正确的术语。对于这个问题,我设置了一个非常简单的表格子集,该子集超出了视频游戏的线框范围。我提前道歉,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);

在此示例中,我在游戏中设置了一个非常简约的制作系统示例,其中制作的元素需要其他元素。

我需要创建一个查询,在其中我可以根据我拥有的 itemscrafted 表中提取所有可用值。例如,根据上面的数据,我会执行以下操作:

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

requestCraftableItems([1, 2, 3])

这应该执行一个查询,指出用户拥有项目 1、3 和 4,并尝试查找包含所有 reqs 的 精心制作的 条目。项目数组中满足 reqs.crafted_id 的 item_id 。在此示例中,不应返回任何内容,因为固化皮革的 crafted_id 需要项目 1 和 3,而 tea 的 crafted_id 需要项目 1

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

requestCraftableItems([1, 3, 4]);

当用户向查询提供 1 和 3 时,它应该返回精心制作的 Cured LeatherTea 条目。

这不是我最初的用例,只是一个示例,旨在以非常简单的方式说明我正在尝试做的事情。

编辑:澄清一下,如果将值 (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/

相关文章:

php - Mysql - 查询DATETIME字段(索引)性能

mysql - mysql 中是否有按特定行排序的功能?

php - 使用 PHP 将 Excel 数据导入 MySQL 数据库

mysql - 如何根据R中的价格范围将数据从一列复制到新列?

c# - 在更新语句中使用左连接 where is null

mysql - 从连接列不唯一的另一个表中获取值

php - Symfony2 表单集合外键

php - PHP消息系统中创建一条通往 "tag"人的​​路

mysql - 在我的 mysql 表中输入 ID

mysql - 将数据加载到表中时可以忽略行吗?