【问题标题】:PHP/SQL Join four tables where two table rely on anotherPHP/SQL 连接四个表,其中两个表依赖另一个表
【发布时间】:2018-03-27 10:12:15
【问题描述】:

我很困惑,尝试了多种方法来解决这个问题,但没有成功。 我对 PHP 和 SQL 很陌生。 我有四个表,我试图获得一个 while 循环来从中检索数据。我最大的问题是其中两个表的 id 与另一个表相关,我无法为 Away Team 回显球队名称。

这些是我的桌子:

表 1

Away_Team Team_ID、Away_Team_ID

表 2

Home_Team Team_ID、Home_Team_ID

表 3

团队 Team_Name、Team_ID

表4

夹具 Away_Team_ID、Home_Team_ID、日期

<?php
 $data_s = $conn->query('SELECT Teams.Team_Name, Home_team.Home_Team_ID, 
 Home_team.Team_ID 
 FROM Teams
 JOIN Home_team ON Teams.Team_ID = Home_team.Home_Team_ID
 JOIN Fixtures ON Fixtures.Home_Team_ID = Home_team.Home_Team_ID
 UNION ALL
 SELECT Teams.Team_Name, Away_team.Team_ID, Away_team.Away_Team_ID 
 FROM Teams
 JOIN Away_team
 ON Teams.Team_ID = Away_team.Team_ID
 JOIN Fixtures ON Fixtures.Away_Team_ID = Away_team.Away_Team_ID;’} ?>

我的 While 循环:

<?php
echo "<table border=1>
        <tr>
            <th>Date</th>
            <th>Home Team</th>
            <th>Away Team</th>
            <th>Score</th>
        </tr>" 

while($records = $data_s->fetch()) {
    echo "<tr>";
    echo "<td>" . $records['Date'] . "</td>";
    echo "<td>" . $records['Team_Name'] . "</td>";
    echo "<td>" . $records['Team_Name'] . "</td>";
    echo "<td>" . $records['Home_Score'] . "-" . $records['Away_Score'] . "</td>";
    echo "</tr>";
} 
echo "</table>" ?>

我不知道如何让我的第二支球队名称与与该夹具相关的客队名称相呼应。 提前致谢。

【问题讨论】:

  • 不确定您是否可以控制数据库布局,但如果只使用TeamsFixtures 表,这似乎会变得更简单。为什么需要Away_teamHome_team 表?
  • 分数(Home_Score 和 Away_Score)从何而来?
  • 我同意,很难理解主队和客队表格的用途。当然,主客场球队已经在赛程表中定义了。这些其他表似乎是多余的。
  • 我通过多对多表对规范化不太好。我是不是搞错了?

标签: php sql join


【解决方案1】:

根据您尝试对输出执行的操作(并假设分数来自 Fixtures 表),我认为您应该从 Fixtures 表开始并加入该表,即

SELECT Date, 
    (SELECT Team_Name FROM Teams WHERE Teams.Team_ID = Home_Team.Team_ID) As Home_Team,
    (SELECT Team_Name FROM Teams WHERE Teams.Team_ID = Away_Team.Team_ID) As Away_Team,
    Home_Score,
    Away_Score
FROM Fixtures
JOIN Home_Team ON Home_Team.Home_Team_ID = Fixtures.Home_Team_ID
JOIN Away_Team ON Away_Team.Away_Team_ID = Fixtures.Away_Team_ID

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 2015-05-15
    • 2012-06-10
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多