简体   繁体   English

PHP,MySQL-连接

[英]PHP, MySQL - JOINs

I am new to PHP and I just cannot figure out my code. 我是PHP新手,只是无法弄清楚我的代码。 I am using MySQL and PHP. 我正在使用MySQL和PHP。

table: person PK: personID Other fields: lastName, firstName, hireDate, imgName 表:人员PK:人员ID其他字段:姓,名,hirateDate,imgName

table: validMajors PK: majorAbbrev Other Fields: majorDesc 表:validMajors PK:majorAbbrev其他字段:majorDesc

(Junction) table: personMajors personID, majorAbbrev (连接)表:personMajors personID,majorAbbrev

When I run my code (using NATURAL JOIN ) it will display the image, last&first name, and hire date. 当我运行代码(使用NATURAL JOIN )时,它将显示图像,姓氏和雇用日期。 Which is great! 太好了! But I need it to display their majors as well (I would like the majorAbbrev to be displayed). 但是我也需要它来显示其专业(我希望显示majorAbbrev)。 It also does not display people who are in the person table but are not in the personMajors table, which is an issue because we have staff members in the person table (who do not have a major since they are not a student) 它还不会显示在人员表中但不在人员专业表中的人员,这是一个问题,因为我们在人员表中有工作人员(由于他们不是学生,所以没有专业)

Here is my 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>

Any ideas/solution will be greatly appreciated! 任何想法/解决方案将不胜感激!

Because you are not concatenating your php properly. 因为您没有正确连接 PHP。 You ended ( ; ) your echo after displaying the $row["lastName"] . 在显示$row["lastName"]之后,结束了( ;echo

You can try these to join the three tables: 您可以尝试将它们加入三个表:

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

Or you can define what columns to call in your query: 或者,您可以定义要在查询中调用的列:

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

Then you can call the results with the way you are calling it right now (cleaner 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>';

(Second try): Is the person to major relationship one to one or one to many? (第二次尝试):人与主要关系是一对一还是一对多?

OK, this SELECT Statement should work: 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 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM