使用外键从第二个表中获取值
问题描述:
我正在创建一个幻想足球android应用程序,其中使用php文件和SQL获取JSON数据。我的问题涉及2个表:使用外键从第二个表中获取值
player_details
- player_id(主键)
- FIRST_NAME
- 姓氏
user_team (所有ID除了PK场是外键链接到player_id)
- user_team_id(主键)
- goalkeeper_id
- rightback_id
- leftback_id
- 等
我希望能够运行PHP脚本,用一个简单的选择声明,它将显示用户团队的详细信息。我还想包含玩家的名字和姓氏,这些玩家与user_team职位id字段中的外键相关联。但是我只能显示user_teams的详细信息和players_id。
SELECT *
FROM user_team
WHERE user_id = '".$uid."'
答
在这种情况下,你必须做许多JOINs
,你有你的团队位置的数量。
一样,
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)
);
为了提高数据的consitancy,也可能是通过进一步规范介绍positions
表,比你想在ID参考team_positions
也是。
与此同时,user_team表会保留团队的详细信息,如名称&任何其他你想放在那里的东西(会徽,也许?),以及团队ID。
这样,你会有相当灵活的结构。而这在关系数据库模型中的做法通常很常见。