我正在创建一个基于口袋妖怪的数据库,但我目前难以插入口袋妖怪用不同的动作。
每个神奇宝贝都有一个动作集,所以不仅仅是一个动作,而是许多动作。但是,当我尝试将可变长度移动量的Pokemon插入到表中时,MySQL忽略了之前的那些并且只插入了最后一步。
简而言之:我如何插入同一个口袋妖怪的多个记录,但是它们有不同的移动?
[我想一个很好的类似真实世界的例子是一个拥有多个电子邮件地址的人。我该如何将其插入表格?]
答案 0 :(得分:0)
嗯,桌子是什么样的? (他们的结构是否在你的控制之下?)
如果您受限于单个"电子邮件"字段,我看到您可以将多个电子邮件地址与单个记录(=人)关联的唯一方法是将电子邮件字段视为逗号(或其他)分隔列表。
如果你控制了结构,你可以切换到" Person" s和" Email" s之间的一对多关系 - 例如:
tblPerson
[id]
tblEmailAddresses
[person_id]
[email]
您可以这样查询:
SELECT id, email
FROM tblPerson INNER JOIN tblEmailAddresses ON
id = person_id
WHERE id = <person you're interested in>
哪个会返回与该人有电子邮件地址一样多的记录。
如果没有看到您的代码/数据,很难说完全插件的外观,但您可以执行以下操作:
sID = <whatever>
For each sEmail in EmailCollection
INSERT INTO tblEmailAddresses
(person_id, email)
VALUES (sID, sEmail)
Next
答案 1 :(得分:0)
问题在于你将它作为一对一的关系实现,但你所拥有的是多对多的关系(每个口袋妖怪有很多动作,每个动作都可以被许多口袋妖怪学习)。
您可能想要做的是有两张桌子。
Table 1: Pokemon
ID, Name, Move1ID, Move2ID, Move3ID, Move4ID, Types etc.
Table 2: Moves
ID, Name, PP, Power, type etc.
然后您可以使用另一个表,其中包含这两个表之间的所有连接信息。您有多行包含相同的Pokemon ID和多行包含相同的Move ID,但[Pokemon ID,Move ID]组合将是唯一的。
Table 3: PokemonMoves
PkID, MoveID
然后你可以通过这个关系表
从Pokemon表到Moves表进行连接SELECT *
FROM Pokemon AS p
LEFT JOIN PokemonMoves AS pm on p.ID = pm.PkID
LEFT JOIN Moves AS m ON m.ID = pm.MoveID
关于多对多关系的帖子很多,这看起来是一个好的开始:Many to many relationship?