2011-03-31 30 views
0

我將如何去存儲一行中的引用數組?例如,如果我要製作一個在線交易紙牌遊戲,我會有一張包含所有紙牌的牌桌,每個玩家都有一個牌組,由ID參考列表表示。MySQL - 在每一行中存儲引用數組

+1

你動心存儲值的數組在數據庫中的一列,閃爍的紅燈和電喇叭應該在你的頭上去了,警告你,你的數據庫設計需要的任何時間更好的標準化。 – 2011-03-31 14:42:20

+0

@Christopher - 你意識到問題出在數據庫設計上,而不是實際上將關係數據庫系統中的語言結構存儲起來? – 2011-03-31 14:46:50

+0

@Mickael,我確實相信我太快地閱讀了這個問題,而我的大腦卻在一條相切線上;我的錯。 – Christopher 2011-03-31 14:50:38

回答

2

我會爲此做一個單獨的關係表,其中card_owner_idcard_id作爲字段。相應地設置外鍵以在卡或用戶被刪除時自動刪除關係。

+0

所以我會用'SELECT * FROM cards WHERE card_id =(SELECT card_id FROM user_cards WHERE card_owner_id = $ user_id)'來獲取用戶的卡片? – nkorth 2011-03-31 17:19:05

+0

你可以使用一個連接來獲取它們:'SELECT c。* FROM cards AS c LEFT JOIN user_cards AS uc ON(uc.card_id = c.id AND uc.card_owner_id = $ user_id)''。 – Kaivosukeltaja 2011-03-31 17:39:26

0

如何爲玩家提供一張桌子,一張用於卡片,另一張用於卡片(鏈接playerId和cardId)?

1

兩個解決方案:

  1. 序列化你的PHP數組,並將其存儲到你的表的二進制領域。設計你的數據庫,以便你可以表示這樣一種關係:「一個玩家有幾張牌」:玩家(player_id);卡(card_id,player_id)
-1

每個玩家可能在「玩家」表中有一排;並且每一行都可能有一個字段用於所有可能的卡片中的每一個;並且這些單元中的每一個都可能被標記爲真或假,以表示玩家擁有或不擁有所涉及的卡。

會這樣嗎?你認爲呢?

- 皮特

+0

請不要在SO上簽名。 – 2011-03-31 14:50:35

+0

我以爲有一個固定的甲板大小,並在用戶表中有很多字段,但這真的看起來效率低下。 – nkorth 2011-03-31 17:43:02