【问题标题】:Displayed SQL rows being limited for reason with JOINED tables由于 JOINED 表的原因,显示的 SQL 行受到限制
【发布时间】:2012-01-09 20:32:06
【问题描述】:

我有以下代码来执行 JOINED 表的动态查询,但由于某种原因,每当我尝试显示该行时,它只显示前 9 行然后停止。

$query = "SELECT `results`, `Success`, `Failure`, `Counter`, `Grades`, `Classes`,
`Special_Id`, `SpecialCondition` FROM `Courses` INNER JOIN `Students` ON `id` = 
`Students_Id`";

这就是我获取行并显示它们的方式:

<?php
foreach($results as $row){
echo $row['grades'].'<br />';
}

我在 phpMyAdmin 中测试了 JOIN SQL 语法,虽然它作为一个积极的任务返回,但我注意到它只显示原始表,而不是连接后的连接表。

关于我在哪里出错的任何建议?我只显示这部分代码,因为一切正常,当我删除 JOIN 语法时它工作得很好,所以我相信加入是导致问题的原因,但我看不到我在做什么错了。

已编辑以显示 SQL 模式:

当然,希望以下内容有所帮助。

Table: Courses
id (PK)| results | Success | Failure | Counter | Grades | Classes |
1        Posted      1         0         2        B+         2
2        Pending     0         0         1        NA         1
3        Posted      0         1         3        F          1
4
5
6
7
8
9
10+

Table: Students
Students_Id (PK) | FirstName | LastName |
     1              Chris        Test
     2               Jen         Test   
     3
     4  
     5
     6
     7
     8
     9
     10+

为了便于阅读,我删除了其他 10 多行中的信息,但其中有数据填充。

另外,我注意到在 OP 中,我选择了“Special_Id 和 SpecialConditions”。这实际上是错误的。我不再选择这些字段。

在连接表时,是否每列都必须有数据才能成功地进行 INNER JOIN 或者也可以有空行?

【问题讨论】:

  • 能否将数据库架构添加到问题中?
  • 我不确定我是否理解您的架构。课程 1 属于学生 Chris,课程 2 属于 Jen 等等?

标签: mysql sql join inner-join


【解决方案1】:

您的查询显示您正在加入Courses 表中的idStudents 中的Students_Id 匹配。但是,该架构使它看起来好像id 实际上不是学生标识符,而只是该表中的记录索引。在我看来,您需要在 Courses 中添加一列作为 Students 表的键。

我在 phpMyAdmin 中测试了 JOIN SQL 语法,虽然它作为一个积极的任务返回,但我注意到它只显示原始表,而不是连接后的连接表。

请注意,您只告诉查询选择 Courses 表中包含的列。您可能还想选择Students.FirstNameStudents.LastName(或类似的东西)。

【讨论】:

  • 啊,我明白了。我完全忘记了(FK)和关于选择位的好点,我什至没有考虑过。感谢您的帮助!
【解决方案2】:

连接表时,要完成连接的行必须满足您的连接条件。在这种情况下,它是一个内连接,因此它会抛出任何不满足连接条件的行。

我要对您说的第一点是使用表别名,如下所示:

SELECT 
    c.results, 
    c.Success, 
    c.Failure, 
    c.Counter, 
    c.Grades, 
    c.Classes
FROM 
    Courses c
    INNER JOIN Students s ON 
        c.id = s.Students_Id

我要提到的第二件事是您的数据库设计有点令人担忧。首先,为什么要将Coursesid 列加入StudentsStudents_ID 列?当然,除非它们是一对一的(因为它们是各自表的 PK)。如果是这样的话,那么他们真的应该只是一张桌子。

但是,如果 Grades 列中包含任何 null 值,您将显示一个换行符(使用您的 PHP 脚本),或者它可能会出错(自从我编写 PHP 脚本以来已经有一段时间了)。最好先在 MySQL 查询工具中检查。

【讨论】:

  • 嘿埃里克,你的回答绝对有帮助,但我选择了迈克尔上面的答案,因为他指出了我的跛行问题。不过感谢您的帮助,我非常感谢。另外,我这样做是因为我的意图是稍后将其全部分解为基数。我只是出于关系目的忘记了(FK)。我一定会听取你关于使用别名的建议 :)
猜你喜欢
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
  • 2021-05-06
  • 2022-11-12
相关资源
最近更新 更多