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

时间:2017-04-11 22:09:23

标签: php mysql

我正在创建一个幻想足球Android应用程序,其中获取JSON数据是使用php文件和SQL完成的。我的问题涉及2个表:

player_details

  • player_id(主键)
  • first_name
  • last_name

user_team (除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."'

1 个答案:

答案 0 :(得分:1)

在这种情况下,你必须尽可能多地为你的团队所拥有的职位数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)
);

为了增加数据的一致性,可以通过引入positions表进一步规范化,而不是通过id在team_positions中引用它。

与此同时,user_team表将仅保留团队详细信息,例如名称&amp;你想放在那里的任何其他东西(徽章,也许?),以及团队ID。

这样,你将拥有相当灵活的结构。这通常是在关系数据库模型中做事的方式。