跨列合并来自两个 MYSQL 表的数据
Combining Data from Two MYSQL Tables in Across Columns
我搜索了很多,但找不到答案。也许我没有使用正确的关键字,但我最终决定只问一下。很抱歉,如果之前有人问过这个问题,但我找不到。
这是我的情况:
我有一所学校。一个 MYSQL table 有一个学生列表,ID 为 auto_increment。
另一个 table 有一个 class 的列表,其中有多个列用于多个学生。目前,我让学生使用第一列中的 ID 在 class table 中注册。
我想显示 class 的列表,并让 class table 的每个成员 ID 调用学生 table 的名字。
我知道如何使用 mysql 连接仅对一列学生 ID 执行此操作。
但是,我想获取每个成员 1、成员 2、成员 3 等的名称并显示它们。
这可能吗?
其他问题,有更好的方法吗?例如,我可以只按名称存储 class table 数据并直接输出,然后当我需要使用 SELECT x,y,z FROM db WHERE member1 = name?
想法?
谢谢!
为每个学生添加列是一个糟糕的架构,原因有很多。
你需要做的是有一个学生 table,每个学生都有一个主键。每个 class.
都有一个主键的 class table
然后你有一个注册 table,每行有一个外键给一个学生,一个外键给一个学生 class。这个 table 基本上是你加入 table 的多对多关系。一个学生可以注册多个 classes,当然一个 class 可以有多个学生。
使用特定 classID 查询注册 table 将为您提供给定 class 的所有注册学生。使用特定 studentId 查询注册 table 将为您提供特定学生注册的所有 classes。
如果您想检索学生或 classes 的姓名,您可以对相应的 table 进行连接(为此请阅读内部连接)。
另一种方法,我在我的应用程序中使用它来编写 MySQL 存储函数。
例如,fn_lookupStudentName(studentId int) 将是一个接受 studentId 和 returns 学生姓名的函数。同样对于 classes.
使用这些函数,您不需要在查询中进行显式连接,并且如果出于某种原因从学生或 class table 中删除行,您的查询也不会丢失数据秒。另外,我认为您不应该从数据库中硬删除行,而是使用 isDeleted 列或类似方法进行软删除。
我故意没有在答案中放入任何代码,以鼓励阅读以上想法。
我搜索了很多,但找不到答案。也许我没有使用正确的关键字,但我最终决定只问一下。很抱歉,如果之前有人问过这个问题,但我找不到。
这是我的情况:
我有一所学校。一个 MYSQL table 有一个学生列表,ID 为 auto_increment。 另一个 table 有一个 class 的列表,其中有多个列用于多个学生。目前,我让学生使用第一列中的 ID 在 class table 中注册。
我想显示 class 的列表,并让 class table 的每个成员 ID 调用学生 table 的名字。
我知道如何使用 mysql 连接仅对一列学生 ID 执行此操作。
但是,我想获取每个成员 1、成员 2、成员 3 等的名称并显示它们。
这可能吗?
其他问题,有更好的方法吗?例如,我可以只按名称存储 class table 数据并直接输出,然后当我需要使用 SELECT x,y,z FROM db WHERE member1 = name?
想法?
谢谢!
为每个学生添加列是一个糟糕的架构,原因有很多。 你需要做的是有一个学生 table,每个学生都有一个主键。每个 class.
都有一个主键的 class table然后你有一个注册 table,每行有一个外键给一个学生,一个外键给一个学生 class。这个 table 基本上是你加入 table 的多对多关系。一个学生可以注册多个 classes,当然一个 class 可以有多个学生。
使用特定 classID 查询注册 table 将为您提供给定 class 的所有注册学生。使用特定 studentId 查询注册 table 将为您提供特定学生注册的所有 classes。
如果您想检索学生或 classes 的姓名,您可以对相应的 table 进行连接(为此请阅读内部连接)。
另一种方法,我在我的应用程序中使用它来编写 MySQL 存储函数。 例如,fn_lookupStudentName(studentId int) 将是一个接受 studentId 和 returns 学生姓名的函数。同样对于 classes.
使用这些函数,您不需要在查询中进行显式连接,并且如果出于某种原因从学生或 class table 中删除行,您的查询也不会丢失数据秒。另外,我认为您不应该从数据库中硬删除行,而是使用 isDeleted 列或类似方法进行软删除。
我故意没有在答案中放入任何代码,以鼓励阅读以上想法。