我正在创建一个 Fantasy Football Android 应用程序,其中使用 php 文件和 SQL 来获取 JSON 数据。我的问题涉及2张表:
玩家详细信息
- player_id(主键)
- 名字
- 姓氏
用户团队 (除 PK 之外的所有 id 字段都是链接到player_id 的外键)
- user_team_id(主键)
- goalkeeper_id
- rightback_id
- leftback_id
- 等等。
我希望能够运行一个 PHP 脚本,其中包含一个简单的 select 语句,它将显示用户团队的详细信息。我还想包含球员的名字和姓氏,它们链接到 user_team 位置 id 字段中的外键。然而,我所能做的就是仅显示 user_teams 详细信息和players_id。
SELECT *
FROM user_team
WHERE user_id = '".$uid."'
最佳答案
在这种情况下,您必须执行与您团队中的职位数量一样多的JOIN
。
喜欢,
SELECT u.user_team_name, p1.goalkeeper_name, p2.rightback_name, p3.leftback_name, ...
FROM user_team u
LEFT JOIN player_details p1 ON u.goalkeeper_id = p1.player_id
LEFT JOIN player_details p2 ON u.rightback_id = p2.player_id
LEFT JOIN player_details p3 ON u.leftback_id = p3.player_id
...
WHERE u.user_team_id = <some id>
可行,但不是很好。
然后,您可以更改模型,并引入第三个表,将玩家与团队和位置联系起来,例如:
CREATE TABLE team_positions (
player_id INT,
team_id INT,
position TEXT,
FOREIGN KEY player_id
REFERENCES player_details(player_id)
FOREIGN KEY team_id
REFERENCES user_team(user_team_id)
);
为了提高数据的一致性,可以通过引入positions
表来进一步规范化,而不是在team_positions
中通过id引用它。
与此同时,user_team 表将仅保留团队详细信息,例如名称和您想要放在那里的任何其他内容(也许是徽章?)以及团队 ID。
这样,您将拥有相当灵活的结构。这几乎是关系数据库模型中常见的处理方式。
关于php - 使用外键从第二个表获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43357037/