我在一个系统上工作,并且该模块应该回显数据库的内容。
在我向其中添加一些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
答案 0 :(得分:1)
我无法想象user_info
表对于加入JOIN会有任何好处,因此我将其删除是一个合理的猜测。我还假设您所需的列全部来自courses
表,所以我用SELECT中的列名来提名表名。
为了读者清楚起见,我喜欢使用INNER JOIN
而不是JOIN
。 (they are the same beast)
将$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>";
}
}