从foreach循环中的多个表中提取

时间:2016-02-22 23:38:11

标签: php mysql

请原谅这里介绍的初学者级代码 - 我只是学习PHP和MySQL,所以它应该都是非常基础的脚本。

我的数据库有两个表,团队和成员。 teams表具有主键teamID,这是member表中的外键。在列出每个成员的页面上的foreach循环中,我试图通过引用teamID列来访问teams表上的列。我玩过它,但我得到两件事之一:1)空白返回,似乎找不到任何匹配; 2)我正在尝试将数组更改为字符串的错误。

我会很感激任何见解 - 不是为了正确答案,而是更能让我理解我没有连接点的地方。提前谢谢。

<?php foreach ($members as $member) : ?>
        <tr>
            <td><?php echo $member['memberName']; ?></td>
            <td><?php echo $member['memberDOB']; ?></td>
            <td><?php echo get_member_team(); ?></td>
        </tr>

在我的member_db.php页面上:

function get_member_team() {
    global $db;
    $query = 'SELECT teamName
              FROM teams
              WHERE teams.teamID = members.teamID';             
    $statement = $db->prepare($query);
    $statement->execute();
    $member_team = $statement->fetch();
    $statement->closeCursor();
    return $member_team;
}

1 个答案:

答案 0 :(得分:1)

当你循环遍历成员时,你需要将当前迭代的团队ID传递给你的函数,并通过将它绑定到语句来在get_member_team查询中使用它。

HTML更改:

<td><?php echo get_member_team( $member['teamID'] ); ?></td>

PHP更改:

function get_member_team( $team_id ) {
  global $db;
  $query = 'SELECT teamName
            FROM teams
            WHERE teams.teamID = :team';             
  $statement = $db->prepare($query);
  $statement->bindParam(':team', $team_id, PDO::PARAM_INT);
  $statement->execute();
  $member_team = $statement->fetch();
  $statement->closeCursor();
  return $member_team[0];
}

但是,在初始查询中加入两个表可能是个更好的主意,因此您不必为循环中的每个项目进行另一个数据库调用。