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

标签 php mysql

我正在创建一个 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/

相关文章:

php - PHP和MySQL的utf-8编码的字符串问题?

php - Laravel - 使用什么作为 session ID?

MYSQL 更新查询语法错误 28-10-2016a

php - 如何按降序显示来自多个表的数据库结果

php - 将数据库中的多个值存储到一个变量中

javascript - 循环遍历多维数组并构建路径图

javascript - 从输入框获取数据并插入到mysql数据库

php - Laravel 5.2 按距用户邮政编码的距离搜索用户

php - max_questions - 保持分数 [mysql/php]

mysql - 如何使用函数连接两个 MySQL 表