1

私は小さなゲームのデータベース構造に取り組んでいます。このゲームは、アーマー セットのように「キット」を使用します。現在、「kit」、「kit_armor」、「kit_item」、「kit_item_enchantment」の 4 つのテーブルがあります。「kit」テーブルはキットの ID とその名前を保持し、「kit_armor」テーブルはキットのアーマーを保持し、「kit_item」テーブルは「kit_armor」列が指すことができるアイテムを保持し、「kit_item_enchantment」テーブルは「kit_item_enchantment」テーブルを保持します特定のアイテムの追加エンチャント データを保持します。

現在、私はクエリを実験しており、スタックオーバーフローとインターネットのリセットを検索して、残念ながら結果なしでデータベースからすべてのキット情報を取得するクエリを作成しています。

これはテーブル構造です:

mysql> describe kit;
+----------+-----------------+------+-----+---------+----------------+
| Field    | Type            | Null | Key | Default | Extra          |
+----------+-----------------+------+-----+---------+----------------+
| kit_id   | int(4) unsigned | NO   | PRI | NULL    | auto_increment |
| kit_name | varchar(32)     | NO   | UNI | NULL    |                |
+----------+-----------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)

mysql> describe kit_armor;
+------------+-----------------+------+-----+---------+-------+
| Field      | Type            | Null | Key | Default | Extra |
+------------+-----------------+------+-----+---------+-------+
| kit_id     | int(4) unsigned | NO   | PRI | NULL    |       |
| helmet     | int(4) unsigned | YES  | MUL | NULL    |       |
| chestplate | int(4) unsigned | YES  | MUL | NULL    |       |
| leggings   | int(4) unsigned | YES  | MUL | NULL    |       |
| boots      | int(4) unsigned | YES  | MUL | NULL    |       |
+------------+-----------------+------+-----+---------+-------+
5 rows in set (0.01 sec)

mysql> describe kit_item;
+------------+-----------------+------+-----+---------+----------------+
| Field      | Type            | Null | Key | Default | Extra          |
+------------+-----------------+------+-----+---------+----------------+
| id         | int(4) unsigned | NO   | PRI | NULL    | auto_increment |
| item_id    | int(4) unsigned | NO   |     | NULL    |                |
| stack_size | int(4) unsigned | NO   |     | NULL    |                |
+------------+-----------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

mysql> describe kit_item_enchantment;
+----------------+-----------------+------+-----+---------+-------+
| Field          | Type            | Null | Key | Default | Extra |
+----------------+-----------------+------+-----+---------+-------+
| item_id        | int(4) unsigned | NO   | PRI | NULL    |       |
| enchantment_id | int(4) unsigned | NO   |     | NULL    |       |
| tier           | int(4) unsigned | NO   |     | NULL    |       |
+----------------+-----------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

参照列:

+---------------------------+--------------------+-------------------------------+-----------------
| TABLE_NAME                | COLUMN_NAME        | REFERENCED_TABLE_NAME | REFERENCED_COLUMN_NAME |
+---------------------------+--------------------+-------------------------------+-----------------
| kit_armor                 | kit_id             | kit                   | kit_id                 |
| kit_armor                 | helmet             | kit_item              | id                     |
| kit_armor                 | chestplate         | kit_item              | id                     |
| kit_armor                 | leggings           | kit_item              | id                     |
| kit_armor                 | boots              | kit_item              | id                     |
| kit_item_enchantment      | item_id            | kit_item              | id                     |

私の質問は、すべてのキット情報を取得するための最良の方法と、単一のクエリ (JOINs?) で取得できるかどうか、または複数のクエリに分割する必要があるかどうかです。

昨日からこの問題に苦労してきましたが、その間、データベースからリレーションデータを選択する最良の方法について多くの調査を行ってきましたが、非常に複雑なガイドとクエリにしか遭遇しませんでした。信じられないほど混乱します。

前もって感謝します、

ジョナス

4

0 に答える 0