Я новичок в PHP, и я просто не могу понять свой код. Я использую MySQL и PHP.
стол: человек
ПК: человек
Другие поля: lastName, firstName, hireDate, imgNameтаблица: validMajors
ПК: 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>
Любые идеи / решения будут с благодарностью!
Потому что вы не конкатенации Ваш PHP правильно. Вы закончили (;
) ваш echo
после отображения $row["lastName"]
,
Вы можете попробовать их, чтобы объединить три таблицы:
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="https://web-answers.ru/wp-content/uploads/2019/02/staff/'.$row["imgName"].'.jpg"><br>
<strong>'.$row["firstName"].'</strong>
<strong>'.$row["lastName"].'</strong><br>
Hire Date: '.$row["hireDate"].'
Major: '.$row["majorAbbrev"].'
</td>';
(Вторая попытка): Является ли человек с основными отношениями один к одному или один ко многим?
ОК, этот оператор SELECT должен работать:
SELECT person.*, validMajors.* FROM person AS p, validMajors AS vm, personMajors AS pm WHERE p.personID = pm.personID AND pm.majorAbbrev = vm.majorAbbrev