我决定把我正在制作的游戏的信息存储在几个表中,但是我遇到了一个问题:我的游戏中的每一项都可以有最多三种能力,这是几乎没有限制的。这将导致在试图连接表和显示能力名称时出现问题。
我正在使用MySQL服务器,我创建了一个视图,它将项目的所有信息合并到一个巨大的表中。问题是,如果一个项目有三种不同的能力,它就不符合视图的where条件。
以下是对此问题具有重要意义的表定义(有更多的表):
CREATE TABLE items_misc (
Item_ID INT(4) NOT NULL,
Item_Hash INT(4) NOT NULL UNIQUE,
Ability_One INT(4),
Ability_Two INT(4),
Ability_Three INT(4),
element_id INT(2) NOT NULL,
PRIMARY KEY(Item_ID),
INDEX(Item_Hash),
FOREIGN KEY(Item_ID) REFERENCES items_names(IID),
FOREIGN KEY(Ability_One) REFERENCES item_abilities(AID),
FOREIGN KEY(Ability_Two) REFERENCES item_abilities(AID),
FOREIGN KEY(Ability_Three) REFERENCES item_abilities(AID),
FOREIGN KEY(element_id) REFERENCES element_types(EID)
);
CREATE TABLE item_abilities(
AID INT(4) NOT NULL,
Name VARCHAR(30) NOT NULL UNIQUE,
Description VARCHAR(99) NOT NULL,
PRIMARY KEY(AID)
);下面是CREATE语句的WHERE子句:
WHERE items_names.IID = items_stats.Item_ID AND
items_names.IID = items_misc.Item_ID AND
item_types.TID = items_stats.type_id AND
element_types.EID = items_misc.element_id AND
item_abilities.AID = items_misc.Ability_One AND
item_abilities.AID = items_misc.Ability_Two AND
item_abilities.AID = items_misc.Ability_Three;如何更改联接条件或表,以说明每个项目可能具有来自同一能力池的三种不同能力(即能力顺序不重要)?
发布于 2015-01-30 21:49:01
如果您希望从item_abilities中获得三种功能的值,则需要在from子句中引用三次item_abilities:
FROM items_names,
items_stats,
items_misc,
item_types,
element_types,
item_abilities item_abilities1,
item_abilities item_abilities2,
item_abilities item_abilities3
WHERE items_names.IID = items_stats.Item_ID AND
items_names.IID = items_misc.Item_ID AND
item_types.TID = items_stats.type_id AND
element_types.EID = items_misc.element_id AND
item_abilities1.AID = items_misc.Ability_One AND
item_abilities2.AID = items_misc.Ability_Two AND
item_abilities3.AID = items_misc.Ability_Three;顺便提一句,强烈建议您使用SQL-1999联接,而不是加入where子句:
FROM items_names
JOIN items_stats ON items_names.IID = items_stats.Item_ID
JOIN items_misc ON items_names.IID = items_misc.Item_ID
JOIN item_types ON item_types.TID = items_stats.type_id
JOIN element_types ON element_types.EID = items_misc.element_id
JOIN item_abilities item_abilities1
ON item_abilities1.AID = items_misc.Ability_One
JOIN item_abilities item_abilities2
ON item_abilities2.AID = items_misc.Ability_Two
JOIN item_abilities item_abilities3
ON item_abilities3.AID = items_misc.Ability_Three;https://stackoverflow.com/questions/28245033
复制相似问题