这个可能有点复杂。我搜索了类似的问题,发现没什么看似相关的。
首先让我建立我的数据库结构。
我有几张表,但相关的表格如下:
现在我将decklist存储为由逗号分隔的cardid
字符串。我意识到这是低效的,当我开始改进我的代码时,我会创建一个具有tcg_card_in_deck
,relationid
,cardid
的新表deckid
。现在,我的代码假定为decklist
字符串。
我正在建立一个允许购买套牌的功能。为了给他们实际的卡片,我有以下查询(用PHP生成它实际上将是大约50个条目):
$db->query_write("INSERT INTO
`tcg_card`
(masterid, userid, foil)
VALUES
('159', '15', '0'),
('209', '15', '0'),
('209', '15', '0'),
('318', '15', '0')");
这部分很容易。我现在的问题是确保刚刚添加的卡可以抓取它们并将它们放在一个数组中(当前以字符串形式输入,并在代码更新后作为条目输入到单独的表中)。如果是一个条目,我可以使用LAST_INSERT_ID()
。如果我做了50个单独的插入查询,我可以在每次迭代时获取id并将它们添加到数组中。但由于这一切都是通过一个查询完成的,我不知道如何有效地找到正确的卡片放入套牌清单。我想我可以在卡片表中添加一个日期行字段来指定获取的日期,但这看起来很草率,如果用户在相似的时间范围内从交易或助推器包中获得卡片,则可能会产生有缺陷的结果。
任何建议都将不胜感激!
答案 0 :(得分:0)
通过删除tcg_card
更改cardid
,并使masterid
和userid
成为复合键。然后,添加一个名为quantity
的行。由于您无法以任何有意义的方式区分卡片的两个副本(除了您可以使用此架构处理的箔片),因此不需要每张卡片都能获得自己的ID。
据推测,您没有动态输入新的tcg_master
行,因此您无需担心将其ID撤回。
答案 1 :(得分:0)
阅读关于这个问题的评论我想到了一个非常简单易用的解决方案: Get all inserted IDs when inserting multiple rows using a single query
我已使用表格tcg_history
跟踪加油包购买情况。此表还可以跟踪其他类型的购买,例如入门牌。
我只需要在tcg_card
表格中添加一个引用tcg_history
。recordid
的字段,然后我就可以选择所有来自该购买的卡片。