2013-08-05 38 views
0

這一個可能有點複雜。我搜索了類似的問題,發現沒有什麼相關的。基於剛剛插入的多個值生成字符串

讓我從建立我的數據庫結構開始。

我有幾個表,但相關的有如下: Master Table

Card Table

Deck Table

現在我有存儲爲用逗號分隔的cardid字符串的套牌。我意識到這是低效率的,當我開始改進我的代碼時,我將創建一個新表tcg_card_in_deck,它有relationid,cardiddeckid。現在我的代碼假設一個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並將它們添加到數組中。但是因爲這些都是通過一次查詢完成的,所以我不知道如何有效地找到正確的牌並放入牌桌。我想我可以在卡表中添加一個日期線字段來指定獲取的日期,但這似乎是sl and不馴的,如果用戶在類似的時間範圍內從交易或增強包中獲取卡牌,可能會產生有缺陷的結果。

任何意見將不勝感激!

回答

0

更改tcg_card刪除cardid,並使masteriduserid複合鍵。然後,添加一個名爲quantity的行。既然你無法以任何有意義的方式區分一張卡的兩張副本(除了可以用這種方案處理的金屬箔),就不需要每張卡都有自己的ID。

假設您沒有動態輸入新的tcg_master行,所以您不必擔心將其ID退出。關於這個問題,我想到了一個非常簡單和容易的解決方案的

+0

這有點過於草率。我想確保我追蹤每張單張牌,因爲如果牌組中的牌被換掉,那麼有失敗者可以刪除副牌。 – Jared

+0

暗示一張牌一次只能屬於一個牌組,然後呢?這實際上對用戶來說似乎是不好的(即,「如果我一次只能打一副牌,我爲什麼不能一次把這張牌放在兩個牌組裏?」)。 –

+0

作爲進一步的更新:如果是這樣的話,那麼你現在可以創建你的'tcg_card_in_deck'表,因爲無論你提出什麼解決方案都會在表存在時被廢棄。不要浪費時間設計具有失效日期的解決方案,只需從一開始就做好。 –