【问题标题】:Query outputting more records than it should do查询输出比它应该做的更多的记录
【发布时间】:2011-10-17 14:15:04
【问题描述】:

我有一个包含很多连接的 SQL 查询。事实是,在查询必须连接 StudentClass 表和 Class 表之前,它输出了正确的行数,应该是 4 行。但是当我包含 Class 和 StudentClass 表时,它会输出 6 行,而它仍然应该输出 4 行。问题是,如果一个学生正在学习 2 个模块并且在 2 个班级,那么它会输出 4 个模块,即 2 个模块重复和 4 个班级,其中 2 个班级重复。为什么会发生这种情况,是我设置表格的方式有问题还是查询有问题?

以下是PHP代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

  <head>
    <title>Exam Grade Report</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  </head>

  <body>

    <?php
      if (isset($_POST['submit'])) {

        $query = "
          SELECT * FROM Course c
            INNER JOIN CourseModule cm ON c.CourseId = cm.CourseId
            JOIN Module m ON cm.ModuleId = m.ModuleId 
            JOIN Session s ON m.ModuleId = s.ModuleId
            JOIN Grade_Report gr ON s.SessionId = gr.SessionId
            JOIN Student st ON gr.StudentId = st.StudentId
            JOIN StudentClass sc ON st.StudentId = sc.StudentId
            JOIN Class cl ON sc.ClassId = cl.ClassId 
          WHERE
            ('".mysql_real_escape_string($sessionid)."' = '' OR gr.SessionId = '".mysql_real_escape_string($sessionid)."')
          AND
            ('".mysql_real_escape_string($courseid)."' = '' OR cl.CourseId = '".mysql_real_escape_string($courseid)."')
          AND
            ('".mysql_real_escape_string($moduleid)."' = '' OR cl.ModuleId = '".mysql_real_escape_string($moduleid)."')
          AND
            ('".mysql_real_escape_string($classid)."' = '' OR sc.ClassId = '".mysql_real_escape_string($classid)."')
          AND
            ('".mysql_real_escape_string($teacherid)."' = '' OR s.TeacherId = '".mysql_real_escape_string($teacherid)."')
          AND
            ('".mysql_real_escape_string($studentid)."' = '' OR gr.StudentId = '".mysql_real_escape_string($studentid)."')
          AND
            ('".mysql_real_escape_string($grade)."' = '' OR gr.Grade = '".mysql_real_escape_string($grade)."')
          ORDER BY $orderfield ASC";

        $num = mysql_num_rows($result = mysql_query($query));
        mysql_close();

    ?>

  </body>
</html>

我想在word文档中显示查询结果和表格。顺便附上word文件,方便大家打开word文件吗?

谢谢

【问题讨论】:

  • 这是代码重载。尽量减少代码量,只显示相关的sn-p
  • 如果你问的是 SQL 查询问题,那么不要包括 5 英里的 PHP 和 HTML... 显示导致问题的实际 SQL,并且可能是有关表的一些详细信息结构。
  • 你想组合什么?学生?学生班?您要提取什么信息(您可能希望将 SELECT * 替换为 SELECT [field], [field], [field],因为这将 1)减少返回的数据量,2)让我们了解您尝试提取的信息)。

标签: php mysql database join


【解决方案1】:

您是否尝试将所有 JOIN 更改为 LEFT JOIN?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 2020-01-10
    • 1970-01-01
    相关资源
    最近更新 更多