0

我正在开发一个课堂网站。

有一个表格可以将学生资料/数据插入到数据库表中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)
  • 用户身份

这是我将数据插入表的 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 知识

4

4 回答 4

1

您不需要 PHP 来执行此操作...纯 SQL 伪解决方案:

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

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

于 2013-04-04T07:44:23.370 回答
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 类型的列名。

于 2013-04-04T08:34:15.107 回答
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);

希望你能有所了解

于 2013-04-04T07:34:37.040 回答
0

为了避免学生重复输入,您可以制作另一个表格,在其中将学生链接到他们的班级。

例如:

学生们

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

班级组

  • classgroup_id(主键)
  • 类组名

每个班级的学生

  • student_id(外键)
  • classgroup_id(外键)
于 2013-04-04T07:50:09.147 回答