Mysql将数据插入到包含重复数据的表中,但一个字段除外

时间:2013-04-04 07:20:04

标签: php mysql database insert duplicates

我正在开发一个教室网站。

有一个表单可以将学生资料/数据插入数据库表student

此网站有5个班级组,ID为id= 1, 2, 3, 4, 5

将数据插入数据库表成功。

但我有一个问题:每个学生必须在课堂1 and 2下,所以当我们插入数据时,我需要数据库每次自动创建两个数据库结果,两个结果都是相同的数据,除了{{ 1}},我的意思是一个结果必须classgroup_id,第二个结果必须是classgroup_id=1,我需要mysql自动生成这个,以便在添加每个学生时......任何想法。?

这是我的表结构

  • student_id(int)AI
  • 名称
  • 电子邮件
  • classgroup_id(默认值= 1)
  • USER_ID

这是我用于将数据插入表格的PHP代码

classgroup_id=2

谢谢...... 我只有中级PHP知识

4 个答案:

答案 0 :(得分:1)

你不需要PHP来做这个......纯SQL伪解决方案:

INSERT INTO student (student_id name, email) SELECT name, email from student where classgroup_id = ?

如果你构建一个fiddle并留下关于在哪里找到所述小提琴的评论,我很乐意根据你的具体需要调整查询。

答案 1 :(得分:1)

ClassGroups是表格还是静态数字?

如果它们只是静态数字,那么我认为最简单的方法是使用重复数据进行另一次插入。例如,两行应为:

$this->db->query("INSERT INTO " . DB_PREFIX . "student SET user_id = '" . (int)$this->user->getId() . "', name = '" . $this->db->escape($data['name']) . "',  email = '" . $this->db->escape($data['email']) . "'");

$this->db->query("INSERT INTO " . DB_PREFIX . "student SET user_id = '" . (int)$this->user->getId() . "', name = '" . $this->db->escape($data['name']) . "',  email = '" . $this->db->escape($data['email']) . "', classgroup_id =2");

如果它们在某个表中,那么你可以插入一个插入(代码会更短)但是使用不同的插入语法。例如,您的ClassGroup表只是ClassGroups:

$this->db->query("INSERT INTO " . DB_PREFIX . "student (user_id, name, email, ClassGroup_id)
select " . (int)$this->user->getId() . ", '" . $this->db->escape($data['name']) . "',  '" . $this->db->escape($data['email']) . "',ClassGroup_id from ClassGroups where ClassGroup_id=1 or ClassGroup_id=2");

但我认为如果你为每个数据(学生,ClassGroup)做不同的表并为它们做关系表应该是最好的,它不会重复数据,如果你通过主AI收集数据,表学生会更快键而不是varchar类型列名。

答案 2 :(得分:0)

您必须先将记录保存在临时表中,然后再进行操作..试试

//get last insertId
$last_insert_id = $this->db->insert_id();
$new_id      = $last_insert_id +1;    


$query = "CREATE TEMPORARY TABLE tmp SELECT * FROM yourtable WHERE your_primary_key =  $last_insert_id;

         UPDATE tmp SET your_primary_key= $new_id,classgroup_id  = 2 WHERE your_primary_key = $last_insert_id;

         INSERT INTO yourTable SELECT * FROM tmp WHERE your_primary_key = new_id";
$this->db->query($query);

希望你有所了解

答案 3 :(得分:0)

为了避免学生重复参赛作品,您可以制作另一张表格,将学生与他们的班级联系起来。

例如:

<强>学生

  • student_id(主键)
  • 名称
  • 电子邮件
  • user_id(如果仍然需要......)

<强> Classgroups

  • classgroup_id(主键)
  • classgroup_name

<强> StudentsPerClassgroup

  • student_id(外键)
  • classgroup_id(外键)