0

这个可能有点复杂。我搜索了类似的问题,但没有发现任何相关的问题。

让我从建立我的数据库结构开始。

我有几张表,但相关的如下: 主表

牌桌

甲板桌

现在,我将甲板列表存储为以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')");

这部分很容易。我现在的问题是确保刚刚添加的卡片可以获取它们的 id 并将它们放在一个数组中(当前作为字符串输入,并在代码更新后作为单独表的条目)。如果它是一个条目,我可以使用LAST_INSERT_ID(). 如果我做了 50 个单独的插入查询,我可以在每次迭代中获取 id 并将它们添加到数组中。但是因为这一切都是通过一个查询完成的,所以我不知道如何有效地找到正确的卡片放入套牌列表中。我想我可以在卡片表中添加一个日期线字段来指定获取日期,但这似乎很草率,如果用户在类似的时间范围内从交易或补充包中获得卡片,它可能会产生有缺陷的结果。

任何意见,将不胜感激!

4

2 回答 2

0

阅读关于这个问题的评论我想到了一个非常简单易行的解决方案: Get all inserted IDs when inserting multiple rows using a single query

我已经用一张桌子跟踪了补充包的购买情况tcg_history。此表还可以跟踪其他类型的购买,例如入门套牌。

我只需要在tcg_card表上添加一个引用tcg_history. recordid,然后我将能够选择该购买的所有卡片。

于 2013-08-05T08:03:05.157 回答
0

tcg_card通过删除cardid, 和 makemasteriduserid一个复合键来改变。然后,添加一个名为quantity. 由于您无法以任何有意义的方式区分卡片的两个副本(除了箔,您可以使用此模式处理),因此不需要每张卡片都有自己的 ID。

大概您没有tcg_master动态输入新行,因此您不必担心将它们的 ID 拉出来。

于 2013-08-05T07:12:41.833 回答