我正在开发一个项目,我需要在sql db中的名称上存储一个未知长度列表。它将是一个班级中的学生列表,每个班级的学生都会有所不同。我还需要能够按学生名称搜索它们(在PHP / SQL中),以查看学生参加的所有课程。我正在考虑将类存储为一行而将学生存储为数组,但我无法找出一个sql来查询数据库中的数组。我正朝着正确的方向前进吗?也许为每个班级的每个学生创建一个新的数据库行?也许让学生行并更新每个类的数组?我稍后可能会使用AJAX来检索信息。谢谢!
答案 0 :(得分:1)
为什么不创建两个表来存储有关现有Classes
和Students
的信息,以及一个关系表Participant
,用于存储有关哪个学生去哪个的信息类?
有些事情:
CREATE TABLE Classes (
id int NOT NULL,
description varchar(200),
PRIMARY KEY (id)
)
CREATE TABLE Studentes (
id int NOT NULL,
name varchar(200),
PRIMARY KEY (id)
)
CREATE TABLE Participant (
student_id int NOT NULL,
class_id int NOT NULL,
FOREIGN KEY (student_id) REFERENCES Students(id)
FOREIGN KEY (class_id) REFERENCES Classes(id)
)
然后,您可以通过SQL查询找出学生访问的课程:
SELECT c.description
FROM Students s
LEFT JOIN Participant p ON (s.id = p.student_id)
LEFT JOIN Classes c ON (p.class_id = c.id)
WHERE s.name = 'SilverSlug'
;
答案 1 :(得分:1)
您正在寻找的是关系表。它将跟踪班级和学生。实施例
类表:所有类的表
ID = Primary key
|ID | Name |
| 1 | Math |
学生表:所有学生的表
ID = Primary key
|ID | Name |
| 1 | Sam |
| 2 | Tom |
关系表:用于跟踪类的实例
ID = Primary key Class_ID & Student_ID are Secondary keys
|ID | Class_ID | Student_ID | Time |
| 1 | 1 | 1 | 6am |
| 2 | 1 | 2 | 6am |
通过这些表格,您可以进行简单的查询,找出哪个班级,您还可以找出学生的班级。