Правильный путь вложения MySQLi в PHP - PullRequest
0 голосов
/ 08 мая 2018

У меня есть вопрос, который, вероятно, довольно простой, чтобы ответить на вопрос о вложении запроса MySQLi в другой запрос. Я не уверен, является ли это наилучшей практикой, и был бы признателен, если бы кто-то мог помочь, сообщив мне, хорошо ли работает приведенный ниже пример, или есть ли лучший способ сделать это.

Таблица 1: студенты

id | linked_teacher | student_name | student_age
1  | 1              | Bob Eaves    | 15 
2  | 1              | Ellen Robs   | 11
3  | 2              | Will Tops    | 7
4  | 3              | Scott Long   | 13

Таблица 2: Учителя

id | teacher_name
1  | Mrs Green
2  | Mr Wood
3  | Dr Grey
4  | Professor Long

Мой PHP выглядит так, как показано ниже:

$sql = "SELECT linked_teacher, student_name, student_age FROM students";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
  while($row = $result->fetch_assoc()) {
    $linked_teacher = $row["linked_teacher"];

    $sql2 = "SELECT teacher_name FROM teachers WHERE teacher_name = $linked_teacher";
    $result2 = $conn->query($sql2);
    if ($result2->num_row > 0) {
      while($row2 = $result2->fetch_assoc()) {
        $teacher_name = $row2["teacher_name"];
      }
    }

    echo "$row["teacher_name"]. " - ". $row["student_name"]. " - " . $row["student_age"]";
  }
}

Это выведет следующее:

Mrs Green - Bob Eaves - 15
Mrs Green - Ellen Robs - 11
Mr Wood - Will Tops - 7
Dr Grey - Scott Long - 13

Теперь, хотя я ценю, что моему примеру на самом деле не нужны две таблицы, если я могу понять правильный способ ответа на этот пример, который, я уверен, я не сделал в своем решении, тогда я могу применить теорию к более сложному решения.

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

1 Ответ

0 голосов
/ 08 мая 2018

Используйте один цикл и объедините таблицы. Ваш код быстрее (комментарий 3) и проще. Обязательно проконсультируйтесь и узнайте, как справляться с испорченными данными, как отмечается во втором комментарии выше. Удачи!

 $sql = "SELECT teacher_name, student_name, student_age FROM students JOIN teachers ON linked_teacher = teachers.id";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    echo "$row["teacher_name"]. " - ". $row["student_name"]. " - " . $row["student_age"]";
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...