私は小さなゲームのデータベース構造に取り組んでいます。このゲームは、アーマー セットのように「キット」を使用します。現在、「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?) で取得できるかどうか、または複数のクエリに分割する必要があるかどうかです。
昨日からこの問題に苦労してきましたが、その間、データベースからリレーションデータを選択する最良の方法について多くの調査を行ってきましたが、非常に複雑なガイドとクエリにしか遭遇しませんでした。信じられないほど混乱します。
前もって感謝します、
ジョナス