1

我正在开发一个系统,这个模块应该回显数据库的内容。

在我向其中添加了一些 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 既不回显也不给出任何错误消息。


更新:我实际上需要通过 JOINing 更多表和更改所选列来增加查询复杂性。我需要加入这些表:

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

4

1 回答 1

1

我无法想象该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>";
    }
}
于 2018-10-28T04:56:01.633 回答