私は4つのテーブルを持っています。
- ユーザーを含むテーブル A - (
user_id, username, and name
) - トークンを持つテーブル B - (
token_id, user_id
)。各ユーザーには 10 個のトークン エントリがあります。各トークンは 1 人のユーザーにのみ割り当てられます。ユーザーは複数のトークンを持っています (10) - アーケード ゲームである表 C - (
arcade_id, token_id, name, levels, lives
)。1 つのアーケード ゲームにのみ、1 つのトークンのみを割り当てることができます。 - 賞品である表 D - (
prize_id, token_id, name, length, width, height
)。1 つの賞品に割り当てることができるトークンは 1 つだけです。
トークンは、アーケード ゲームまたは賞品のいずれかに割り当てられるか、または両方には割り当てられません。
私の質問は、特定のユーザーのどのトークンがゲームまたは賞品に割り当てられているか、まだ割り当てられていないかを把握するために、MySQL 結合クエリをどのように設定するかです。テーブルのレイアウトは最適ですか? または、別のレイアウトの提案はありますか?
ここに私のテーブルがあります:
mysql> select * from users;
+---------+--------+
| user_id | name |
+---------+--------+
| 1 | User 1 |
| 2 | User 2 |
| 3 | User 3 |
| 4 | User 4 |
+---------+--------+
mysql> select * from tokens;
+----------+---------+
| token_id | user_id |
+----------+---------+
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |
| 4 | 2 |
| 5 | 2 |
| 11 | 2 |
| 6 | 3 |
| 7 | 3 |
| 10 | 3 |
| 8 | 4 |
| 9 | 4 |
+----------+---------+
mysql> select * from prizes;
+----------+----------+-----------+
| prize_id | token_id | prizename |
+----------+----------+-----------+
| 1 | 4 | prize 1 |
| 2 | 7 | prize 2 |
| 3 | 8 | prize 3 |
| 4 | 9 | prize 4 |
+----------+----------+-----------+
mysql> select * from arcade;
+-----------+----------+----------+
| arcade_id | token_id | gamename |
+-----------+----------+----------+
| 1 | 1 | game 1 |
| 2 | 2 | game 2 |
| 3 | 3 | game 3 |
| 4 | 5 | game 4 |
| 5 | 11 | game 6 |
+-----------+----------+----------+
次の情報を取得できる SQL クエリが必要です。
ユーザー 1 には 2 つのトークンがあります。トークン ID 1 はゲーム 1 に割り当てられ、トークン ID 2 はゲーム 2 に割り当てられます。
または、ユーザー 2 の場合 - 彼らは 4 つのトークンを持っています - トークン ID 3 はゲーム 3 に割り当てられ、トークン ID 4 は賞品 1 に割り当てられ、トークン ID 5 はゲーム 4 に割り当てられます。
または、ユーザー 3 の場合 - 彼らは 3 つのトークンを持っています - トークン ID 6 はまだ割り当てられておらず、トークン ID 7 は賞品 2 であり、トークン ID 10 は割り当てられていません
等々。
このようなMySQLクエリ文字列を作成したいと思います
Select ****
from *****
Where user_id = 1
ユーザーIDを指定して、上記のすべての情報を取得する場所。