我有 4 张桌子。
- 具有用户的表 A - (
user_id, username, and name
) - 具有标记的表 B - (
token_id, user_id
)。每个用户有 10 个令牌条目。每个令牌仅分配给一个用户。一个用户有多个令牌 (10) - 表 C 即街机游戏 - (
arcade_id, token_id, name, levels, lives
)。一个代币只能分配给一个街机游戏。 - 表 D 即奖品 - (
prize_id, token_id, name, length, width, height
)。一个奖品只能分配一个代币。
代币被分配给街机游戏或奖品或什么都没有,但不能同时分配给两者。
我的问题是如何设置 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 并获取上面的所有信息。