MySQL - 如何在另一个表中有一个列引用多个条目?

时间:2014-05-12 20:52:41

标签: mysql sql

我正在使用MySQL为角色扮演游戏创建角色卡数据库。我正在设置角色卡,以便每个角色都能拥有多种技能。

以下是示例卡的草图:

Sample Card

到目前为止,我已经设置了两个表,名为CHARACTERS和SKILLS:

  

CHARACTERS(id,last_name,first_name,character_name,skills)

     

技能(身份证,姓名,描述)

我正在寻找一种方法,让CHARACTERS表中的技能列能够以某种方式存储SKILLS表中列出的多项技能。

实现这一目标的好方法是什么?

3 个答案:

答案 0 :(得分:3)

最好的方法是通过一个单独的表格,列出给定角色的所有技能。它看起来像这样:

CHARACTER_SKILLS(character_id,skill_id)

答案 1 :(得分:3)

您不想使用Characters表中的技能列,而是想要使用关系数据库的功能并使用Character_Skills查找表: Character_Skills(char_id,skill_id){char_id映射到Characters.id,skill_id映射到Skills.id}

然后你可以加入表格。

答案 2 :(得分:1)

汤姆和戴夫杰米森说得对。我只是添加一些颜色,因为我们都喜欢这些类型的游戏:

CHARACTERS       (char_id, last_name, first_name, character_name)
SKILLS           (skill_id, skill_name, skill_description)
CHARACTER_SKILLS (char_id, skill_id, skill_level)

然后你可以这样做:

SELECT c.char_id, c.character_name, s.skill_name, cs.skill_level
FROM CHARACTERS c LEFT JOIN CHARACTER_SKILLS cs ON c.char_id=cs.char_id
                  LEFT JOIN SKILLS s on cs.skill_id=s.skill_id;

得到大致相同的东西:

1, ers81239, mysql, 10
1, ers81239, stackoverflow, 10
1, ers81239, funny_examples, 0
2, other_character, mysql, 4
etc.