0

これは少し複雑かもしれません。同様の質問を検索しましたが、関連すると思われるものは何も見つかりませんでした。

データベース構造を確立することから始めましょう。

いくつかの表がありますが、関連するものは次のとおりです。 マスターテーブル

カードテーブル

デッキテーブル

現在cardid、コンマで区切られた文字列としてデッキリストを保存しています。これは非効率的であることに気づき、コードの改善に取り掛かると、、、を含む新しいテーブルを作成tcg_card_in_deckします。今のところ、私のコードは文字列を想定しています。relationidcardiddeckiddecklist

デッキを購入できる機能を構築中です。彼らに実際のカードを提供するために、次のクエリがあります (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を取得して配列にまとめることができるようにすることです(現在は文字列として入力し、コードが更新されたら別のテーブルにエントリとして入力します)。それが 1 つのエントリであれば、使用できますLAST_INSERT_ID()。50 個の個別の挿入クエリを実行すると、反復ごとに ID を取得して配列に追加できます。しかし、1 回のクエリですべてが完了するため、デッキリストに入れる適切なカードを効果的に見つける方法がわかりません。カード テーブルに dateline フィールドを追加して取得日を指定することもできると思いますが、それはずさんなようで、ユーザーが同様の時間枠でトレードまたはブースター パックからカードを取得した場合、欠陥のある結果が生じる可能性があります。

アドバイスをいただければ幸いです。

4

2 に答える 2

0

この質問に関するコメントを読んで、非常にシンプルで簡単な解決策を考えました: 単一のクエリを使用して複数の行を挿入するときに、挿入されたすべての ID を取得します

私はすでにテーブルでブースター パックの購入を追跡していますtcg_history。このテーブルは、スターター デッキなど、他の種類の購入も追跡できます。

tcg_cardを参照するテーブルにフィールドを追加するだけですtcg_historyrecordid、その購入からのすべてのカードを選択できるようになります。

于 2013-08-05T08:03:05.157 に答える