【发布时间】:2018-08-03 10:47:21
【问题描述】:
我正在尝试在游戏中制作“食谱”系统。玩家可以拥有一家公司并在那里制作物品。
我目前按公司类型获取食谱,但我不知道如何编写查询,如果 item_id 不为空,我也可以获取项目名称和图像。
这是有效的:
SELECT a.recipe_id,
a.item1_id,
a.item1_uses,
a.item2_id,
a.item2_uses,
a.item3_id,
a.item3_uses,
a.item4_id,
a.item4_uses,
a.item5_id,
a.item5_uses,
a.newitem_id,
a.newitem_uses,
a.craft_description,
a.craft_button
FROM
company_recipes AS a,
company_types AS b
WHERE
a.type_id = b.type_id
AND
b.type_id = '".$type."';
"
一个配方可以包含例如制作新东西所需的两个项目,但也可能是 5 个。所以如果它只有 2 个,我只想获取这 2 个的 img 和名称,其余的可以跳过。
我有一个不同的表 store_items,其中包含商品的 img 和名称。我在想一些类似于查询中的 IF ELSE 或 CASE WHEN 的东西,但我不确定我会怎么做。
类似:SELECT c.img, c.name FROM store_items AS c IF a.item1_id is not NULL。
我觉得我已经接近解决方案,但错过了最后一步。
【问题讨论】:
-
今日提示:切换到现代、明确的
JOIN语法!更容易编写(没有错误),更容易阅读和维护,如果需要更容易转换为外连接。 -
另一个提示:选择有意义的表别名,例如 cr 而不是 for company_recipes 的 a。
-
如果可能,请添加一些示例数据。
-
@jarlh - 至少她没有使用
'join'作为表别名。我昨天在工作中看到的:( -
@Deloryan:如果您输入“关系数据库规范化”,您会在 Google、Yahoo 或 Duckduckgo.com 中找到很多内容,这里有一些可以帮助您开始:studytonight.com/dbms/database-normalization.phpen.wikipedia.org/wiki/Database_normalizationsupport.microsoft.com/en-us/help/283878/…