2016-04-06 5 views
0

Ich bin neu in PHP und ich kann einfach meinen Code nicht herausfinden. Ich benutze MySQL und PHP.PHP, MySQL - JOINs

Tabelle: Person PK: PersonId Andere Felder: Nachname, Vorname, HireDate, ImgName

Tabelle: validMajors PK: majorAbbrev Andere Felder: majorDesc

(Junction) Tabelle: personMajors personID, majorAbbrev

Wenn ich meinen Code ausführen (mit NATURAL JOIN) wird das Bild angezeigt, zuletzt & Vorname und Einstellungsdatum. Was großartig ist! Aber ich brauche es, um ihre Majors anzuzeigen (ich möchte, dass das majorAbbrev angezeigt wird). Es werden auch keine Personen angezeigt, die sich in der Personentabelle befinden, aber nicht in der personMajors-Tabelle. Dies ist ein Problem, da wir Mitarbeiter in der Personentabelle haben (die keine Hauptperson haben, da sie keine Schüler sind).

Hier ist mein Code:

<table align="center"> 
    <?php 
     $connection = mysqli_connect(DBHOST, DBUSER, DBPASS, DBNAME); 

     if (mysqli_connect_errno()) { 
      die(mysqli_connect_error()); 
     } 
     $sql = "SELECT * FROM person NATURAL JOIN personMajors ORDER BY lastName"; 

     if ($result = mysqli_query($connection, $sql)) {  
      // loop through the data 

      $columns=4; 
      $i = 0; 
      while($row = mysqli_fetch_assoc($result)) 
      { 

      if($i % $columns ==0){ 


       echo "<tr>"; 
       } 

       echo "<td class='staffImage badgeText frameImage displayInLine'>" . "<img src='images/staff/".$row['imgName'].".jpg'>". "<br>". 
                  "<strong>" . $row['firstName'] . "</strong>" ." ". 
                  "<strong>" . $row['lastName'] . "</strong>" . "<br>" . 
                  "Hire Date: ".$row['hireDate'] ."</td>"; 
                  "Major: " .$row['majorAbbrev'] ."</td>";  //Does not display 

if($i % $columns == ($columns - 1)){ 
       echo "</tr>";    
      } 

      $i++; 
      } 
      // release the memory used by the result set 
      mysqli_free_result($result); 
     } 
     // close the database connection 
     mysqli_close($connection); 
    ?> 
    </table> 

Irgendwelche Ideen/Lösung sehr geschätzt wird!

Antwort

2

Weil Sie nicht richtig concatenating Ihre PHP sind. Sie beendet (;) Ihre echo nach der Anzeige der $row["lastName"].

können Sie versuchen, diese die drei Tabellen zu verknüpfen:

SELECT * FROM person 
     LEFT JOIN personMajors ON person.personID = personMajors.personID 
     LEFT JOIN validMajors ON personMajors.majorAbbrev = validMajors.majorAbbrev 

Oder können Sie festlegen, welche Spalten in Ihrer Abfrage nennen:

SELECT person.personID, 
     person.lastName, 
     person.firstName, 
     person.hireDate, 
     person.imgName, 
     validMajors.majorAbbrev, 
     validMajors.majorDesc 
FROM person 
     LEFT JOIN personMajors ON person.personID = personMajors.personID 
     LEFT JOIN validMajors ON personMajors.majorAbbrev = validMajors.majorAbbrev 

Dann können Sie die Ergebnisse mit der Art und Weise rufen Sie Rufen Sie es jetzt (sauberere Version):

echo '<td class="staffImage badgeText frameImage displayInLine"> 
      <img src="images/staff/'.$row["imgName"].'.jpg"><br> 
      <strong>'.$row["firstName"].'</strong> 
      <strong>'.$row["lastName"].'</strong><br> 
      Hire Date: '.$row["hireDate"].' 
      Major: '.$row["majorAbbrev"].' 
     </td>'; 
+0

Ihr zweiter Vorschlag hat das majorAbbrev angezeigt! Was ist nur der Fortschritt, den ich für jetzt brauchte, danke! –

1

(Zweiter Versuch): Ist die Person zu großen Beziehung eins zu eins oder eins zu vielen?

OK, diese SELECT-Anweisung sollte funktionieren:

SELECT person.*, validMajors.* FROM person AS p, validMajors AS vm, personMajors AS pm WHERE p.personID = pm.personID AND pm.majorAbbrev = vm.majorAbbrev 
+0

Dies erzeugt eine leere Seite (mein HTML zeigt, aber keine Datenbankinformationen) –

+0

Fehler beim Lesen der Join-Tabelle - Entschuldigung. – KC135Q