如何检查一行中的重复列名并删除具有相同class_name的第二行

时间:2013-03-16 09:51:48

标签: php mysql

我正在建立一个学校注册系统,学生可以添加和删除更多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或 它应该被删除

如何为此编写查询。

由于

3 个答案:

答案 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所指出的那样,在插入这些副本之前捕获它们可能会更好。

相关问题