Я работаю над системой, и этот модуль должен отображать содержимое базы данных.
Он работал отлично, пока я не добавил несколько операторов 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
Я не могу себе представить, что 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>";
}
}
Других решений пока нет …