2016-04-06 32 views
0

PHP için yeni ve sadece kodumu çözemiyorum. MySQL ve PHP kullanıyorum.PHP, MySQL - JOIN'ler

tablosu: kişi PK: Soyadı, Ad, HireDate, imgName

tablo: validMajors PK: Diğer alanlar personID majorAbbrev Diğer Alanlar: majorDesc

(Kavşak) tablosu: personMajors personID,

benim kod çalıştırmasına majorAbbrev

(kullanarak) görüntüyü gösterecek, son & ilk ad ve kiralama tarihi. Hangisi harika! Ama ben de onların majörlerini sergilemeye ihtiyacım var (majorAbbrev'in görüntülenmesini istiyorum). Ayrıca, kişi tablosunda bulunan ancak personMajors tablosunda olmayan kişileri de görmüyor, çünkü bu kişi personel tablosunda personel var (öğrencilerden beri büyük olmayanlar var)

<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> 

Herhangi bir fikir/çözüm büyük takdir edilecektir:

İşte benim kodudur!

cevap

2

düzgün concatenating php değildir çünkü. $row["lastName"] görüntülendikten sonra (;) echo'u sonlandırdınız.

Bu üç tablo katılmak için deneyebilirsiniz:

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

Ya da sorguda çağırmak ne sütunlar tanımlayabilirsiniz:

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 

Sonra yolu ile sonuçlarını çağırabilir sen Şu anda arıyoruz (temiz sürümü):

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

İkinci öneriniz, majorAbbrev'in görüntülenmesini sağladı! Şimdilik sadece ihtiyaç duyduğum ilerleme artışı, teşekkürler! –

1

(İkinci adım): Kişi önemli ilişkilerden bire veya bire çok mu? Tamam

, bu SEÇ Bildirimi çalışması gerekir:

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

Bu boş sayfa oluşturur (HTML şovlarım, ancak veritabanı bilgisi yok) –

+0

Katılma masasının yanlış olması - Özür dilerim. – KC135Q