Эхо-содержимое таблиц JOIN SQL с MySQLi - PullRequest
0 голосов
/ 28 октября 2018

Я работаю в системе, и этот модуль должен отображать содержимое базы данных.

Это работало отлично, пока я не добавил несколько операторов JOIN.

Я проверил и протестировал код SQL, и он отлично работает.Что не работает, так это та часть, где я повторяю содержимое таблицы JOINed.

Мой код выглядит следующим образом:

$query = "SELECT reg_students.*, courses.*
          FROM reg_students
          JOIN courses ON reg_students.course_id = courses.course_id
          WHERE reg_students.user_id = '".$user_id."'";

$result = mysqli_query($conn, $query);
if (mysqli_fetch_array($result) > 0) {
    while ($row = mysqli_fetch_array($result)) {
       echo $row["course_name"]; 
       echo $row["course_id"];

Course_name и course_id не отображают и не выдают сообщений об ошибках.


ОБНОВЛЕНИЕ: Мне действительно нужно увеличитьсложность запроса, СОЕДИНЯЯ больше таблиц и изменяя выбранные столбцы.Мне нужно присоединиться к этим таблицам:

tutors со столбцами: tutor_id, t_fname, t_othernames, email, phone number
faculty со столбцами: faculty_id, faculty_name, faculty_code
courses со столбцами: course_id, course_code, course_name, tutor_id, faculty_id

Я хочу присоединиться к этимтаблицы в таблицу reg_students в моем исходном запросе, чтобы я мог фильтровать по $user_id, и я хочу отобразить: course_name, t_fname, t_othernames, email, faculty_name

1 Ответ

0 голосов
/ 28 октября 2018

Я не могу себе представить, что таблица user_info может принести пользу ПРИСОЕДИНЯТЬСЯ, поэтому я удаляю ее как разумное предположение.Я также предполагаю, что все нужные вам столбцы взяты из таблицы courses, поэтому я назначаю имя таблицы именами столбцов в SELECT.

Для ясности читателя мне нравится использовать INNER JOINвместо JOIN.( это один и тот же зверь )

Приведение $user_id в качестве целого числа - это просто лучшая практика, которую я добавляю, на тот случай, если переменная подается пользователем /ненадежный ввод.

Количество строк в наборе результатов считается с помощью mysqli_num_rows().

Если вы хотите получить доступ только к данным набора результатов с помощью ассоциативных ключей, сгенерируйте набор результатов с помощьюmysqli_fetch_assoc().

При написании запроса с JOIN часто бывает полезно объявить псевдонимы для каждой таблицы.Это в значительной степени уменьшает раздувание кода и напряжение чтения.

Непроверенный код:

$query = "SELECT c.course_name, t.t_fname, t.t_othernames, t.email, f.faculty_name
          FROM reg_students r
          INNER JOIN courses c ON r.course_id = c.course_id
          INNER JOIN faculty f ON c.faculty_id = f.faculty_id
          INNER JOIN tutors t ON c.tutor_id = t.tutor_id
          WHERE r.user_id = " . (int)$user_id;
if (!$result = mysqli_query($conn, $query)) {
    echo "Syntax Error";
} elseif (!mysqli_num_rows($result)) {
    echo "No Qualifying Rows";
} else {
    while ($row = mysqli_fetch_assoc($result)) {
        echo "{$row["course_name"]}<br>";
        echo "{$row["t_fname"]}<br>";
        echo "{$row["t_othernames"]}<br>";
        echo "{$row["email"]}<br>";
        echo "{$row["faculty_name"]}<br><br>";
    }
}
...