概述:这是一个代码,学生可以注册他想要阅读的课程。 他应该只接受一门课程,而不是更多(这是我遇到问题的地方)。虽然学生可以通过优先选择1-3同时搜索最多3门课程。
如果课程已满,则学生将从1开始获得队列索引。一旦在课程中有一个免费点(,这是使用下面的语法,循环一个课程中的每个免费点),队列索引1的学生达到0并且他被接受进入课程。
cmd.CommandText = "UPDATE [Register]
SET QueueIndex = QueueIndex - 1,
Accepted = IIF(QueueIndex = 1, 1, 0)
WHERE QueueIndex > 0 AND CID = @cid;";
但是,如果该学生已被接受,我不知道如何改进此语法并实施检查程序。如果他已经是,那么他应该不被接受(并将他的队列索引设置为0,因此他不再排队,并且接受仍然是假的)并检查下一个学生。我不知道如何改进这种语法。
在db-table中,我使用CID(课程ID), SID(学生ID),接受(bool) ,选择(1-3门课程选择,这里不重要), QueueIndex(int)
我想实现某种..如果当前学生的QueueIndex = 1,并且他的/ SID选择/选择中的任何一个是Accepted = true THEN QueueIndex = 0和Accepted = false,那么当前的选择是不再相关,因为他已被接受。
答案 0 :(得分:1)
您正在寻找以下内容吗?
UPDATE Register
SET QueueIndex=QueueIndex-1, Accepted=0
WHERE QueueIndex>0
AND Accepted<>0
AND CID=@CID
如果是,这对我来说似乎有问题,因为现在接受的字段已更新为假,但该学生已经注册了一次,并且在第三次尝试中,将接受where子句接受学生。如果是这种情况,则应添加其他字段以涵盖所有可能的方案。我建议从键盘上退后一步,拿笔和纸,让你的逻辑正确。它会为你节省很多时间。如果不是这种情况,请忽略上述所有笔和纸部分!