0

私はPHPが初めてで、自分のコードを理解できません。MySQLとPHPを使用しています。

テーブル: person PK: personID その他のフィールド: lastName、firstName、hireDate、imgName

テーブル: validMajors PK: majorAbbrev その他のフィールド: majorDesc

(ジャンクション) テーブル: personMajors personID、majorAbbrev

コードを ( を使用してNATURAL JOIN) 実行すると、画像、姓と名、雇用日が表示されます。これは素晴らしいです!しかし、専攻も表示する必要があります (majorAbbrev を表示したいと思います)。また、person テーブルには含まれているが personMajors テーブルには含まれていない人は表示されません。これは、person テーブルにスタッフ メンバーが含まれているため (学生ではないため専攻を持っていない)、問題です。

これが私のコードです:

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

どんなアイデア/解決策も大歓迎です!

4

2 に答える 2

2

PHPを適切に連結していないためです。を表示した後、終了 ( ;)しました。echo$row["lastName"]

これらを試して、3 つのテーブルを結合できます。

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

または、クエリで呼び出す列を定義できます。

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

次に、現在呼び出している方法で結果を呼び出すことができます (よりクリーンなバージョン):

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>';
于 2016-04-06T01:39:57.520 に答える
1

(2 回目の試行): 人と主要な関係は 1 対 1 ですか、それとも 1 対多ですか?

OK、この SELECT ステートメントは機能するはずです。

SELECT person.*, validMajors.* FROM person AS p, validMajors AS vm,   personMajors AS pm WHERE p.personID = pm.personID AND pm.majorAbbrev = vm.majorAbbrev 
于 2016-04-06T01:39:41.287 に答える