使用外键从第二个表中获取值

问题描述:

我正在创建一个幻想足球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。

这样,你会有相当灵活的结构。而这在关系数据库模型中的做法通常很常见。