我搜索了很多但找不到答案。也许我没有使用正确的关键字,但我最终还是决定问一下。对不起,如果之前有人询问,我找不到它。
这是我的情况:
我有一所学校。一个MYSQL表有一个学生列表,其中包含auto_increment id。 另一个表有一个类列表,其中包含多个学生列的多列。目前,我让学生使用第一栏中的ID在班级表中注册。
我想显示一个类列表,并让类表中的每个成员id从student表中调用该名称。
我知道如何使用mysql连接只使用一列学生ID。
但是,我想获取每个member1,member2,member3等的名称并显示它们。
这可能吗?
其他问题,有更好的方法吗?例如,我可以直接按名称存储类表数据并直接输出,然后当我需要使用SELECT x,y,z FROM db WHERE member1 = name?
思想?
谢谢!
答案 0 :(得分:0)
为每个学生添加列是一个可怕的架构,原因很多。 你需要做的是有一张学生桌,每个学生都有一把主键。一个类表,每个类都有一个主键。
然后你有一个注册表,每行有一个学生的外键和一个类的外键。这个表基本上是你的多对多关系的连接表。学生可以报名参加多个班级,当然一个班级可以有多个学生。
对具有特定classId的注册表的查询将为您提供为给定班级注册的所有学生。对具有特定studentId的注册表进行查询将为您提供特定学生注册的所有课程。
如果您要查找学生或班级的名称,可以在相应的表格上进行联接(请阅读内部联接)。
另一种方法,我在我的应用程序中用来编写MySQL存储函数。 例如,fn_lookupStudentName(studentId int)将是一个接受studentId并返回学生姓名的函数。同样适用于班级。
使用这些函数,您不需要在查询中进行显式连接,并且如果由于某种原因您从学生表或类表中删除行,您的查询将不会错过数据。另外,我不相信您应该从数据库中删除行,而是使用isDeleted列或类似方法进行软删除。
我故意没有在答案中加入任何代码来鼓励他们阅读上述想法。