我有三列,我想将它们全部合并到一个main_table中

时间:2018-09-12 07:32:22

标签: php mysql sql mysqli

我在mysql中工作,我知道表关系'joins'等, 我有三个不同的表,每个表都有列ID,我想将所有三个ID合并到一个主表中,因为我想在将一个表中的所有ID获得后应用内部联接。 您能告诉我如何在一个表中获取所有三个ID,我知道外键和主键,但是我不知道如何在这里应用它……或者有没有简单的方法可以做到这一点。 enter image description here 我的表格名称:

Table 1 contains: student_id coloumn
Table 2 contains: teachers_id
Table 3 contains: class_id

主表是表4 :它将具有 student_id,teachers_id,class_id列

我正在尝试生成时间表,我想在主表time_table中获取学生ID,teachers_id和class_id;我正在尝试进行标准化,这样我就不必一次又一次地重复所有名称,我可以使用id来调用任何班级名称,老师姓名,学科名称等,所有id都是表中的主键。

在这种情况下,这种关系是一对一的


我正在使用php_mysql。

谢谢

3 个答案:

答案 0 :(得分:0)

SELECT Teachers.teacher_name, Class.class_sec, Subjects.subject_name FROM timetable
INNER JOIN Teachers ON Teachers.teacher_id = timetable.teacher_id
INNER JOIN Class ON Class.class_id = timetable.class_id
INNER JOIN Subjects ON Subjects.subject_id = timetable.subject_id

答案 1 :(得分:0)

  

创建表如下,

 create table subject(subject_id int primary key,sub_name varchar(20))
 create table teacher(teacher_id int primary key,teacher_name varchar(20))
 create table class(class_id int primary key,class_sec varchar(20))

 create table timetable(t_id int primary key,subject_id int references 
 subject(subject_id)
 ,teacher_id int references teacher(teacher_id),class_id int references 
 class(class_id))
  

插入样本值

 insert into subject values(1,'Tamil')
 insert into teacher values(1,'Pugal')
 insert into class values(1,'12th A')
 insert into timetable values(1,1,1,1)
  

使用内部联接来连接表,

 select s.sub_name,t.teacher_name,c.class_sec from timetable t1 
 inner join subject s
 on s.subject_id = t1.subject_id inner join teacher t
 on t.teacher_id = t1.teacher_id inner join class c
 on c.class_id   = t1.class_id
  

尝试一下...如果需要任何澄清,请回复我。

答案 2 :(得分:0)

据我了解,如果我错了,请纠正我, 一个班级有一个老师,简化了,一个老师教一个班级或一个以上班级(更复杂的情况是每个班级不止一位老师): 该关系是一对多的,因此 class 表应包含Teacher_id

一个学生可以参加一个以上的课程,但一个班级中有很多学生,那么关系是多对多的, 应该创建一个新表class_per_student

我们需要在其中填充相关信息,

完成后,我们可以加入所有相关表格并获取时间表

添加Teacher_id列:

ALTER TABLE class ADD COLUMN teacher_id INT(9) NOT NULL;
ALTER TABLE class ADD KEY teacher_id (teacher_id);

创建多对多表

CREATE TABLE class_per_student (
 id INT(11) NOT NULL AUTO_INCREMENT,
 class_id INT(9) NOT NULL,
 student_id INT(9) NOT NULL,
 PRIMARY KEY id (id),
 KEY class_id (class_id),
 KEY student_id (student_id)
);

时间表选择:

SELECT
 cps.class_id,
 cps.student_id,
 c.teacher_id
FROM
 class_per_student cps
 INNER JOIN class c ON c.id = cps.class_d
;

请注意,由于所有实体之间的关系是多对多的,因此每个实体(班级,老师,学生)将出现多次,但三个实体的唯一组合将出现一次