需要帮助在mySQL中存储动态列表

时间:2016-01-29 16:01:41

标签: php mysql sql arrays

我正在开发一个项目,我需要在sql db中的名称上存储一个未知长度列表。它将是一个班级中的学生列表,每个班级的学生都会有所不同。我还需要能够按学生名称搜索它们(在PHP / SQL中),以查看学生参加的所有课程。我正在考虑将类存储为一行而将学生存储为数组,但我无法找出一个sql来查询数据库中的数组。我正朝着正确的方向前进吗?也许为每个班级的每个学生创建一个新的数据库行?也许让学生行并更新每个类的数组?我稍后可能会使用AJAX来检索信息。谢谢!

2 个答案:

答案 0 :(得分:1)

为什么不创建两个表来存储有关现有ClassesStudents的信息,以及一个关系表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  |

通过这些表格,您可以进行简单的查询,找出哪个班级,您还可以找出学生的班级。