【问题标题】:How to display an attribute from one table using an ID from another如何使用另一个表中的 ID 显示一个表中的属性
【发布时间】:2017-11-28 21:49:24
【问题描述】:

我在 Oracle 数据库中有以下表:

CREATE TABLE Team
 (
  teamID INT NOT NULL,
  teamName VARCHAR(50),
  wins INT,
  losses INT,
  otlosses INT,
  points INT,
  PRIMARY KEY (teamID)
);


    CREATE TABLE Matchup
       (
           matchID INT NOT NULL,
           roundID INT NOT NULL,
            team1ID INT NOT NULL,
            team2ID INT NOT NULL,
            PRIMARY KEY (matchID),
            FOREIGN KEY (roundID) REFERENCES Round (roundID),
            FOREIGN KEY (team1ID) REFERENCES Team (teamID),
            FOREIGN KEY (team2ID) REFERENCES Team (teamID) 
         );

我正在循环查看比赛表并显示所有比赛。但是,我只能让它显示 TeamID,并尝试使用我从 Matchup 表中获取的 ID 让它显示 TeamName 中的 TeamName。

这是我目前正在尝试的,但似乎无法让它发挥作用。

 $query = 'SELECT team1ID, team2ID  FROM Matchup WHERE RoundID=1 IN (SELECT teamName FROM Team WHERE team1ID=teamID AND team2ID=teamID)';

这是应该在我的 html 页面上显示信息的其余 php 代码

 <h2>Round 1 Matchups</h2>
<table width=100%>
<tr>
    <th title="team1ID">Team</th>
    <th title="team2ID">Team</th>

</tr>

             <?php
           // Remember to replace 'username' and 'password'!
          $conn = oci_connect('xx', 'xxx', '(DESCRIPTION=(ADDRESS_LIST=
          (ADDRESS=(PROTOCOL=TCP)(Host=db2.ndsu.edu)(Port=1521)))
          (CONNECT_DATA=(SID=cs)))');


         //put your query here
        $query = 'SELECT team1ID, team2ID  FROM Matchup WHERE RoundID=1 IN 
        (SELECT teamName FROM Team WHERE team1ID=teamID AND 
         team2ID=teamID)';
        $stid = oci_parse($conn,$query);
        oci_execute($stid,OCI_DEFAULT);

        //iterate through each row
        while ($row = oci_fetch_array($stid,OCI_ASSOC)) 
        {
         echo '<tr>';
         foreach ($row as $item)
        {
          echo '<td>' . $item . '</td>';
         }
          echo '</tr>';

        echo '<br>';}
        echo '</table>';
        oci_free_statement($stid);
       oci_close($conn);
         ?>

【问题讨论】:

    标签: php sql oracle select


    【解决方案1】:

    您可以在team 表上加入两次,每个团队一次:

    SELECT t1.name, t2.name
    FROM   match m
    JOIN   team t1 ON t1.teamid = m.team1id
    JOIN   team t2 ON t2.teamid = m.team2id
    WHERE  roundid = 1
    

    【讨论】:

    • @twolf24 t1t2 是两个连接中 team 表的别名
    • 当我这样做时,我的 html 页面上什么也没有打印出来
    • @twolf24 然后对为什么什么都没有出现进行一些故障排除。我认为查询没有任何问题。进行故障排除是程序员工作的一部分。您是否直接在数据库上运行查询(而不是通过应用程序)。
    • @Mureinik 我现在正在打印团队名称。但是似乎只打印出 team1 而不是比赛中的第二支球队
    • @Mureinik 在数据库本身上运行时,它会正确打印所有内容。感谢您的帮助。我假设我打印到表格的方式一定有问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多