Печать данных из двух разных таблиц с общим полем (mysql и php)

#php #mysql

#php #mysql

Вопрос:

Я пытаюсь вывести данные из двух разных таблиц, где есть общее поле: в table1 у меня много полей, и одно из них — должность сотрудника, которая является числом. в table2 у меня есть два поля: EmpPos (которое равно позиции в table1) и PosName. Теперь я хочу распечатать информацию обо всех сотрудниках из таблицы1, но вместо того, чтобы печатать позицию (которая является числом), я хочу напечатать связанное с ней PosName из таблицы2. Мой следующий запрос не работает!

 $sql ="SELECT * FROM table1, table2 WHERE table1.Position=table2.EmpPos";
$result = $conn->query($sql);

if ($result->num_rows > 0) {

    <tr>
        <th>Name</th>
        <th>Email</th>
        <th>Position Name</th>
        <th>phoneExt</th>

    </tr>";

    while($row = $result->fetch_assoc()) {
        echo "<tr>";
        echo "<td>" .$row['table1.FirstName'] ." " .$row['table1.LastName'] ."</td>";
        echo "<td>" .$row['table1.Email'] ."</td>";
        echo "<td>" .$row['table2.PosName'] ."</td>";
        echo "<td>" .$row['table1.phoneExt'] ."</td>";
        echo"</tr>";
}
  

Заранее спасибо

Ответ №1:

Проблема в том, что вы не определили никаких отношений между таблицами. Поэтому для этого вы должны использовать ВНУТРЕННЕЕ или ЛЕВОЕ соединение:

 SELECT * FROM Table1 m INNER JOIN
Table2 k ON k.EmpPos = m.Position
  

Или следующее должно сделать:

 SELECT * FROM Table1 m LEFT JOIN
Table2 k ON k.EmpPos = m.Position
  

Поскольку у вас есть внешний ключ (общее поле), то использовать объединения легко и очевидно.

Комментарии:

1. вы имеете в виду, что я должен определить внешний ключ в базе данных?, потому что я попробовал ваш код, и он выдает эту ошибку: (Неопределенный индекс: table1. FirstName) и одинаковый для всех полей

2. Я вижу, что уже определен внешний ключ. В обеих таблицах у вас есть поле PositionID . Измените имена таблиц и столбцов в соответствии с вашими.

Ответ №2:

Использование внутреннего СОЕДИНЕНИЯ

 SELECT * FROM table1 tab1 INNER JOIN table2 tab2 ON tab1.position = tab2.EmpPos