[英]How to reject student if they don't have a course prerequisite completed
我正在研究上述大学数据库,并想知道如何强制执行必备表。 我有它,所以每个crs_code都有一个与crs_requires相关的先决条件。 但是,我需要找到一种方法,以便当学生参加课程时,它将检查他们是否具有必要的先决条件才能注册。 如果学生确实有先决条件,它应该只创建新行并让他们注册,如果学生没有必要的先决条件,表格应该显示他们试图进入哪个课程以及他们需要哪个课程。
以下是先决条件表中某些数据的示例:
+----------+--------------+
| crs_code | crs_requires |
+----------+--------------+
| 10 | 1 |
| 11 | 10 |
| 14 | 11 |
| 15 | 11 |
| 20 | 11 |
| 16 | 13 |
| 17 | 13 |
| 18 | 13 |
| 21 | 13 |
编辑:学生的所有课程都在报名表中(以前都参加过课程和当前参加的课程)如果他们通过了课程,他们将获得1分的学分,如果他们目前在课堂上或者没有成功,他们将获得0分。 如何在他们注册需要特定先决条件的课程之前检查他们是否具有所需的必修课程的学分?
谢谢你的帮助!
尝试这个
SELECT crs.crs_code, req.crs_requires
FROM COURSE crs
LEFT JOIN PREREQUISITES req ON req.crs_code = crs.crs_code
WHERE crs.crs_code = @course AND (req.crs_code IS NULL OR
req.crs_requires IN (SELECT crs2.crs_code FROM ENROLLMENT en2
JOIN SECTION se2 ON se2.sec_id = en2.sec_id
JOIN COURSE crs2 ON crs2.crs_code = se2.crs_code
WHERE en2.stu_id = @id))
我假设您将提供学生ID和学生想要注册查询的课程。
编辑 :我看到它的方式,学生登录并选择要注册的课程,在这种情况下,我们知道他想要注册的课程和他的身份。 如果他有资格,我们让他注册。
编辑2 :要检查先决条件中的信用,您只需将AND en2.Credits = 1
添加到子查询中的WHERE子句(实际上检查学生是否已注册先决条件)。
似乎在MySql中, IF..ELSE只能在函数或存储过程中使用。 如果你决定这样做,你可以做类似的事情
IF(EXISTS (a Prequisite AND the student has a particular grade/credit))
//This student has the prereqisite.
ELSE
//This student does not have the required prerequisite
END
是的,如果你能告诉我这是什么问题会很棒
您需要注意您的先决条件和课程表。
你拥有它的方式(因为ERK指示的FK不可为空)。 这意味着每次创建课程时,都必须创建一个实际上无效的必备课程。 如果是这种情况,您应该能够创建没有先决条件的课程。
其他表也会出现同样的问题。 这也可能影响删除行为像删除级联。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.