sql数据库/php中的模式值


Pattern Values in sql database/php

我正在研究这个小的招生系统,我有一个问题,如果我想在我的系统中招收学生,年/lvl的值只应该增加,例如,一年级一旦入学,将是二年级,不会降低到预备年级,也不会翻倍到三年级。到目前为止,我的数据输入是完全插入varchars。如果您能帮助我如何创建进度模式,以及我的数据库应该是什么样子,我将不胜感激。谢谢

我不建议您在真正表示数字的地方使用varchars。这让一些事情变得容易多了。

mysql> create table studentLevels(id int(3) primary key auto_increment, name varchar(100));
Query OK, 0 rows affected (0.02 sec)
mysql> desc studentLevels;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(3)       | NO   | PRI | NULL    | auto_increment |
| name  | varchar(100) | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
mysql> create table studentEnrolled (studentID int(3),subjectID int(3), grade int(3));
Query OK, 0 rows affected (0.00 sec)
mysql> desc studentEnrolled;
+-----------+--------+------+-----+---------+-------+
| Field     | Type   | Null | Key | Default | Extra |
+-----------+--------+------+-----+---------+-------+
| studentID | int(3) | YES  |     | NULL    |       |
| subjectID | int(3) | YES  |     | NULL    |       |
| grade     | int(3) | YES  |     | NULL    |       |
+-----------+--------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> create table subjects (id int(3), subGrade int(3));
Query OK, 0 rows affected (0.05 sec)
mysql> desc subjects;
+----------+--------+------+-----+---------+-------+
| Field    | Type   | Null | Key | Default | Extra |
+----------+--------+------+-----+---------+-------+
| id       | int(3) | YES  |     | NULL    |       |
| subGrade | int(3) | YES  |     | NULL    |       |
+----------+--------+------+-----+---------+-------+
2 rows in set (0.00 sec)

现在,有了这个结构,你就有了一个表来很好地识别你的学生,你可以根据需要在这里使用主键做很多事情(将它链接到其他表,稍后添加你不知道自己想要的功能,然后数据就会标准化)。你有一个整洁的表格,它定义了学生注册的内容,并链接回学生。最后,你有了另一个整洁简洁的表格,里面有主题信息。

查看用于查看学生所在位置的grade列,可以使用以下内容之一:

当学生完成一门课程时,你可以这样更新成绩:

update 
    studentEnrolled a, 
    subjects b 
set 
    a.grade=b.subGrade 
where 
    a.subjectID=b.id 
    and a.studentID=:ID

以上内容将使用应用程序中的绑定参数,代码将简单地将学生成绩更新为刚刚通过的科目。

如果你希望学生能够回去学习成绩较低的课程,但又不希望他们的"成绩"下降,你可以很容易地将以上内容修改为:

update 
    studentEnrolled a, 
    subjects b 
set 
    a.grade=b.subGrade 
where 
    a.subjectID=b.id 
    and a.grade<subGrade 
    and a.studentID=:ID

更新现在只会修改学生获得"分数"的记录。