PHP, MySQL — СОЕДИНЕНИЯ

Я новичок в 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>

Любые идеи / решения будут с благодарностью!

0

Решение

Потому что вы не конкатенации Ваш 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>';
2

Другие решения

(Вторая попытка): Является ли человек с основными отношениями один к одному или один ко многим?

ОК, этот оператор SELECT должен работать:

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

По вопросам рекламы [email protected]