选择和匹配3个表中的数据

时间:2016-12-03 20:16:56

标签: php mysql

SCENARIO

x3表:

Members

    member_id | member_name
    -------------
    1  | member 1
    2  | member 2
    3  | member 3

teams

    team_id | team_name
    -------------
    1  | team 1
    2  | team 2
    3  | team 3

team_members

    team_member_id | member_id | team_id
    ------------------------------------
    1              |  1        | 1
    2              |  2        | 2
    3              |  3        | 3

会员可以与多个团队相关联,因此我将数据分成3个表格。

我想列出所有团队,并在其下方显示每个团队的成员。我不确定这个最好的方法是什么,因为我是数据库设计的新手。

目前,我所做的只是输出两个值:

<?php
$sql = "SELECT * FROM team_members";
    $result = $conn->query($sql);

    if($result->num_rows > 0){
        while($row = $result->fetch_assoc()){

            echo 'teamID: <strong>' . $row["team_id"] . '</strong><br>';
            echo 'memberID: <strong>' . $row["member_id"] . '</strong><br>';

        }
    }

?>

1 个答案:

答案 0 :(得分:0)

您必须在这些表之间JOIN执行inner join,执行只会提供匹配记录的left join。如果您想要所有团队,无论这些团队是否有任何成员,请考虑改为select t.team_id, m.member_ID, m.member_name from teams t left join team_mambers tm on t.team_id = tm.team_id left join members m on m.member_ID = tm.member_ID;

team_mambers

说明:

由于团队和成员之间存在多对多的关系;你有一个关系表,你可以在另一个表join中维护关系(或表的外键)。因此,您teams members members;您首先必须加入关系表,然后根据匹配的ID加入另一个表outer join

我已经执行了{{1}},请记住,并非所有团队都可能拥有成员,因此外部联接将为您提供所有团队,无论其成员与否。