0

そのため、データベースのセットアップにいくつかのテーブルがあり、何かを行うための最良の方法は何だろうと思っています。

基本的に、1 対多の関係があり、1 人のユーザーが複数のアイテムを「所有」できます。これは、php の配列で表され、一意のアイテム番号、タイプ、およびアイテムの値を返す可能性があります。それをMySqlテーブルに保存するにはどうすればよいですか?

ID と現在の所有者とともに、すべてのアイテムのルックアップ テーブルを用意するのが最善でしょうか? すべてのプレイヤーが所有するすべてのアイテムの csv リストを持つユーザー テーブルにライン アイテムを配置する方が理にかなっているでしょうか (それはインデックス化するのに悪夢でしょうか?)。

ここで何が理にかなっていますか?

例:

クラス文字にはアイテムが含まれています[]

キャラクター 1 のアイテム リストには次のエントリがあります。

1、2、5、10、11、12

キャラクター 2 のアイテム リストには次のエントリがあります。

3,4,6,7,8,9,13

このデータを保存する適切な方法は何でしょうか?

ありがとう、

4

1 に答える 1

1

区切られた文字列値をデータベースに保存しないでください。代わりに、多対多テーブルを作成してデータを正規化してください。そうすれば、通常どおりデータをクエリできます。

あなたのスキーマは次のようになると言われています

CREATE TABLE characters 
(
    char_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    name VARCHAR(32),
    ...
) ENGINE = InnoDB;
CREATE TABLE items
(
    item_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    name VARCHAR(6),
    ...
) ENGINE = InnoDB;
CREATE TABLE item_list
(
    char_id INT NOT NULL, 
    item_id INT NOT NULL,
    PRIMARY KEY (char_id, item_id),
    FOREIGN KEY (char_id) REFERENCES characters (char_id),
    FOREIGN KEY (item_id) REFERENCES items (item_id)
) ENGINE = InnoDB;

後で文字ごとに区切られた項目のリストを作成する必要がある場合はexplode、結果セットを反復処理しながらこの値を取得できるように、次のようなクエリを使用できます

SELECT char_id, GROUP_CONCAT(item_id) items
  FROM item_list
-- WHERE ...
 GROUP BY char_id

これがSQLFiddleのデモです

于 2013-08-16T06:40:31.333 に答える