【问题标题】:How to get information from 2 different tables in PHP如何从 PHP 中的 2 个不同的表中获取信息
【发布时间】:2014-11-20 22:46:34
【问题描述】:

我正在尝试为我的运动选择应用程序编写查询。我想显示一个表中的所有信息,以及另一个表中的 2 列。我可以编写从一个表中选择所有信息的查询,但是我很难编写查询以将 2 行添加到我的答案中。这是我正在使用的两个表。顺便说一句,这些都在 Postgresql 中。

我想从这个表中选择所有内容。

 Table "public.weekly_stats"
 Column  |         Type          |     Modifiers      
---------+-----------------------+--------------------
 week_no | integer               | not null
 game_no | integer               | not null
 home    | character varying(40) | 
 away    | character varying(40) | 
 spread  | double precision      | not null default 0
 winner  | character varying(40) | 
 Indexes:
"weekly_stats_pkey" PRIMARY KEY, btree (week_no, game_no)
Foreign-key constraints:
"weekly_stats_away_fkey" FOREIGN KEY (away) REFERENCES team(name)
"weekly_stats_home_fkey" FOREIGN KEY (home) REFERENCES team(name)

然后我想显示每支球队的胜负。那就是用这张表...

 Table "public.team"
 Column |         Type          |     Modifiers      
--------+-----------------------+--------------------
 name   | character varying(40) | not null
 wins   | integer               | not null default 0
 losses | integer               | not null default 0
 Indexes:
  "team_pkey" PRIMARY KEY, btree (name)
Referenced by:
TABLE "weekly_stats" CONSTRAINT "weekly_stats_away_fkey" FOREIGN KEY (away)

我可以从第一个表中选择所有信息

Select week_no, game_no, home, wins, losses, away, wins, losses, spread, winner from weekly_stats inner join team on name.team = weekly_stats.team;

【问题讨论】:

  • @developerwjk 你在说什么?那个帖子是6年前的。为什么你这么粗鲁我刚刚问了一个问题:(
  • 如何两次显示输赢?我希望能够展示主队和客队的胜负
  • @developerwjk 我知道你来自哪里。我更新了我的代码。你明白我会如何显示主客队的输赢吗?你能做到吗?
  • 我不是故意粗鲁的。只是想让您将查询发布到您尝试加入的地方。
  • @developerwjk 感谢您的帮助

标签: php sql database postgresql subquery


【解决方案1】:

您发布的 SQL 正在尝试使用不存在的字段 weekly_stats.team。团队位于 weekly_stats.homeweekly_stats.away 中,由于您有两个团队,因此您需要两个加入。

要加入同一个表两次,你需要给它一个别名。这是通过在联接中表的实际名称后添加team1team2 来完成的:

Select 
 weekly_stats.week_no, 
 weekly_stats.game_no, 
 weekly_stats.home, 
  team1.wins, 
  team1.losses, 
 weekly_stats.away, 
  team2.wins, 
  team2.losses, 
 weekly_stats.spread, 
 weekly_stats.winner 
from weekly_stats 
inner join team team1 on team1.name =  weekly_stats.home
inner join team team2 on team2.name =  weekly_stats.away ;

内部联接将起作用。如果表team 可能缺少团队,您可以将其更改为left join,这将为您提供NULL 用于team 表中缺少数据的胜/负。

【讨论】:

  • 感谢您的回答。 join和inner join有什么区别?没有你的回答,我写了同样的东西,只是没有内在的词。这会改变什么重大的事情吗?
  • @ryan、joininner join 是一样的。
【解决方案2】:

看看这是不是你想要的:

SELECT `weekly_stats.*`, SUM(`team.wins`), SUM(`team.losses`) 
FROM `weekly_stats` 
INNER JOIN `team` 
ON `team.name` = `weekly_stats.team`

如果我误会了你,我真的很抱歉。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多