在两列中组合来自两个MYSQL表的数据

时间:2015-01-05 04:01:42

标签: php mysql join

我搜索了很多但找不到答案。也许我没有使用正确的关键字,但我最终还是决定问一下。对不起,如果之前有人询问,我找不到它。

这是我的情况:

我有一所学校。一个MYSQL表有一个学生列表,其中包含auto_increment id。 另一个表有一个类列表,其中包含多个学生列的多列。目前,我让学生使用第一栏中的ID在班级表中注册。

我想显示一个类列表,并让类表中的每个成员id从student表中调用该名称。

我知道如何使用mysql连接只使用一列学生ID。

但是,我想获取每个member1,member2,member3等的名称并显示它们。

这可能吗?

其他问题,有更好的方法吗?例如,我可以直接按名称存储类表数据并直接输出,然后当我需要使用SELECT x,y,z FROM db WHERE member1 = name?

思想?

谢谢!

1 个答案:

答案 0 :(得分:0)

为每个学生添加列是一个可怕的架构,原因很多。 你需要做的是有一张学生桌,每个学生都有一把主键。一个类表,每个类都有一个主键。

然后你有一个注册表,每行有一个学生的外键和一个类的外键。这个表基本上是你的多对多关系的连接表。学生可以报名参加多个班级,当然一个班级可以有多个学生。

对具有特定classId的注册表的查询将为您提供为给定班级注册的所有学生。对具有特定studentId的注册表进行查询将为您提供特定学生注册的所有课程。

如果您要查找学生或班级的名称,可以在相应的表格上进行联接(请阅读内部联接)。

另一种方法,我在我的应用程序中用来编写MySQL存储函数。 例如,fn_lookupStudentName(studentId int)将是一个接受studentId并返回学生姓名的函数。同样适用于班级。

使用这些函数,您不需要在查询中进行显式连接,并且如果由于某种原因您从学生表或类表中删除行,您的查询将不会错过数据。另外,我不相信您应该从数据库中删除行,而是使用isDeleted列或类似方法进行软删除。

我故意没有在答案中加入任何代码来鼓励他们阅读上述想法。

相关问题