我正在建立一个学校注册系统,学生可以添加和删除更多PHP练习的课程
例如,学生在他/她的日程表中添加了2个会计101课程,这不应该发生。如果在课程表中发生会计101两次,我如何查看我的行 并删除第二个自动重复的条目
例如我目前的日程安排: 我的表
ticket class_name days start_hours end_hours units room_number instructor_name
1094 Accounting 101 SAT 9:00 am 12:15 pm 5 CS266 HARMON , KAREN
2077 Accounting 101 M,W 5:00 pm 8:00 pm 5 SF103 SMITH, BOB
我想自动删除第二个重复,因为故障单1094是Accounting 101 我写了代码来添加和删除类,但我想防止添加重复的class_name或 它应该被删除
如何为此编写查询。
由于
答案 0 :(得分:1)
根据我们上面的对话,您可以添加一个约束,以便学生也可以为每个学期插入唯一 class_name
。
ALTER TABLE register_classes
ADD CONSTRAINT reg_unique UNIQUE (class_name, student_id, semester)
执行此操作后,您不再允许某位class_name
的学生拥有相同的semester
。
答案 1 :(得分:0)
当您通过表单插入记录时,首先检查是否存在类名
$SQL = "SELECT * from student WHERE class_name = '".$_POST['class_name']."'";
使用此查询,检查是否存在任何记录。如果是,那么删除前一个并添加或简单地退出条件。
希望它有所帮助!
答案 2 :(得分:0)
假设后来的票号意味着稍后添加;以下查询应返回需要删除的所有重复项。
SELECT *
FROM schedule s
WHERE s.ticket =
(SELECT MAX(s2.ticket)
FROM schedule s2
WHERE s.class_name = s2.class_name
GROUP BY s2.class_name, s2.student, s2.semester
HAVING COUNT(1) > 1);
尽管正如@JW所指出的那样,在插入这些副本之前捕获它们可能会更好。