2016-12-03 4 views
0

SZENARIOAuswahl und Abstimmung von Daten aus drei Tabellen

x3 Tabellen:

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 

Mitglieder mit mehr als einem Team in Verbindung gebracht werden können, so dass ist, warum ich die Daten aus in 3 Tabellen getrennt.

Ich möchte alle Teams auflisten, und unter ihnen zeigen die Mitglieder von jedem dieser Teams. Ich bin mir nicht sicher, was der beste Ansatz in diesem Fall ist, da ich neu im Datenbankdesign bin.

Zur Zeit alles, was ich tue, ist die Ausgabe der zwei Werte:

<?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>'; 

     } 
    } 

?> 

Antwort

0

Sie zu JOIN zwischen diesen Tabellen wie unten haben wird, eine inner join ausführt, die nur passende Datensätze geben. Wenn Sie möchten, dass alle Teams unabhängig davon, ob diese Teams Mitglieder haben oder nicht, dann überlegen Sie, ob Sie stattdessen eine left join tun.

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; 

Erläuterungen:

Da Sie eine viele zu viele Beziehung zwischen den Teams und Mitglieder haben; Sie haben eine Beziehungstabelle, in der Sie die Beziehung (ODER Fremdschlüssel der Tabellen) in einer anderen Tabelle pflegen team_mambers. Also für Sie zu jointeams mit members; Sie müssen zuerst mit der Beziehungstabelle verbinden und dann mit der anderen Tabelle members basierend auf den übereinstimmenden IDs verbinden.

Ich habe eine outer join durchführen unter Berücksichtigung, dass nicht alle Teams Mitglieder haben können und somit Outer Join erhalten Sie alle Teams unabhängig von Mitgliedern in oder nicht.

+0

Hey Rahul danke für die Antwort, aber ich bekomme nichts davon raus? –

+0

warten überprüfen Tabellenname in der Nähe .. 'links Join team_members tm' 'team_mambers' – Phoenix

+0

@danjbh, lesen Sie die Antwort sorgfältig. sieht so aus, als müssten Sie den Outer Join durchführen. siehe Bearbeiten in Antwort, wenn das hilft. – Rahul