2013-04-04 74 views
0

我正在开发一个教室网站。Mysql将数据插入表格,除了一个字段有重复数据

有一种形式可以将学生档案/数据插入数据库表student

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

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

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

这是我的表结构

  • student_id数据(INT)AI
  • 电子邮件
  • classgroup_id(默认值= 1)
  • USER_ID

这是插入数据我的PHP代码表

$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']) . "'"); 

感谢... 我只有一个中等水平的PHP知识

+0

你正在插入'student_id'?你不必插入AI字段。 – 2013-04-04 07:22:08

+0

@UlfricStormcloak ...对不起,一个错误,我不插入student_id,mysql自动生成student_id为每个学生,我编辑我的问题....谢谢 – mans 2013-04-04 07:25:01

+1

你的主要关键是什么? – 2013-04-04 07:30:30

回答

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类型的列名称收集数据,学生将会更快。

+0

@Andrej ... +1的答案... – mans 2013-04-04 09:27:03

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); 

希望你得到一些想法

+0

但我的classgroup_id不是主键...我需要classgroup_id只有不同于第一个结果,1和2 ...即使这个数据1和2只是一个数字没有问题...谢谢 – mans 2013-04-04 07:42:24

+0

你可以更新我在哪里更新主键 – alwaysLearn 2013-04-04 07:44:11

+0

我设置了classgroup_d默认值1,所以每次插入数据的classgroup_d字段已经有数据1,但是我也需要重复的结果。结果classgroup_id值将是2 ...多数民众赞成它 – mans 2013-04-04 07:50:28

1

你不需要PHP做THI小号...纯SQL pseudosolution:

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

如果你构建一个fiddle和发表评论,以在哪里可以找到说小提琴,我很乐意来调整查询您的特定需求。

0

为了避免学生重复输入,您可以创建另一张表格,将学生链接到他们的课程。

例如:

学生

  • student_id数据(主键)
  • 电子邮件
  • USER_ID(如果仍然需要...)

Classgroups

  • classgroup_id(主键)
  • classgroup_name

StudentsPerClassgroup

  • student_id数据(外键)
  • classgroup_id(外键)