Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过PHP迭代从另一个Mysql表自动填充Mysql表_Php_Mysql_Database_Database Design - Fatal编程技术网

通过PHP迭代从另一个Mysql表自动填充Mysql表

通过PHP迭代从另一个Mysql表自动填充Mysql表,php,mysql,database,database-design,Php,Mysql,Database,Database Design,对这一点的解释可能显得有点冗长和复杂,但请耐心听我说。本质上,我想做的是从数据库中的另一个mysql表(B)中填充一个mysql表(a),但为了这样做,我需要复制表(a)中的值,以便有足够的条目容纳表B中的值 现在来看一个更具体的例子 这些桌子看起来怎么样 课程详情表 课程详情|课程id |年级id |教师id +------------------+-----------+-----------+------------+ 1 1待设置36 2待设置54 3待设置78 4待设置23 年表 年|

对这一点的解释可能显得有点冗长和复杂,但请耐心听我说。本质上,我想做的是从数据库中的另一个mysql表(B)中填充一个mysql表(a),但为了这样做,我需要复制表(a)中的值,以便有足够的条目容纳表B中的值

现在来看一个更具体的例子

这些桌子看起来怎么样

课程详情表 课程详情|课程id |年级id |教师id +------------------+-----------+-----------+------------+ 1 1待设置36 2待设置54 3待设置78 4待设置23 年表 年|学期|年|学期 +-----------------+------+---------+ 1 2012 1 2 2012 2 3 2012 3 4 2012 4 5 2013 1 6 2013 2 7 2013 3 8 2013 4 我希望这张桌子看起来怎么样

course_details_id | course_id | year_id | teacher_id -------------------+-----------+---------+------------+ 1 1 1 36 2 1 2 36 3 1 3 36 4 1 4 36 5 1 5 36 6 1 6 58 7 1 7 36 8 1 8 47 9 2 1 54 10 2 2 54 11 2 3 54 12 2 4 67 13 2 5 67 14 2 6 54 15 2 7 54 16 2 8 54 课程详情|课程id |年级id |教师id -------------------+-----------+---------+------------+ 1 1 1 36 2 1 2 36 3 1 3 36 4 1 4 36 5 1 5 36 6 1 6 58 7 1 7 36 8 1 8 47 9 2 1 54 10 2 2 54 11 2 3 54 12 2 4 67 13 2 5 67 14 2 6 54 15 2 7 54 16 2 8 54 代码的外观

<?php
require_once('open_db.php');
get_dbhandle();

$query_year = "SELECT * FROM year"; 
$result_year = mysql_query($query_year) or die(mysql_error());
$num_year_rows = mysql_num_rows($result_year);
$num_year_rows = ($num_year_rows - 1);

$query_yearid = "SELECT year_semester_id FROM year"; 
$result_yearid = mysql_query($query_yearid) or die(mysql_error());

$result_ccheck = mysql_query("SELECT course_id FROM courses");
while($row = mysql_fetch_array($result_ccheck))
    {
      $course_id = $row['course_id'];
               
       for($i = $num_year_rows; $i >= 0; $i--)
       {
        $query_cdetails = "INSERT INTO course_details (course_id) VALUES ('$course_id')";
        $result_cdetails = mysql_query($query_cdetails);
                       
           while($row = mysql_fetch_array($result_yearid))
           {
             $year_semester_id = $row['year_semester_id'];
             $query = "INSERT INTO course_details(year_semester_id) SELECT year_semester_id FROM year";
             $result = mysql_query($query);
            }
                                               
        }      
    }
?>

在我看来,通过利用关系表,您尝试做的事情可以很容易地完成,而不会使数据库膨胀。在这种情况下,如果我理解正确的话,这里的最终结果是您希望获得
course\u details
中所有行的副本,并将空列设置为
year
表中的每一行

如果是这样,您可以使用JOIN语句选择该数据:

SELECT `a`.`course_id` , `b`.`year_semester_id` as `year_id` , `a`.`teacher_id` FROM `course_details` `a` INNER JOIN `year` `b`
这将返回MySQL结果集中所需的数据。如果要将该数据插入表中,只需确保该表具有正确的列,并将
课程详细信息\u id
字段设置为自动递增,然后执行以下操作:

INSERT INTO `tablename` ( `course_id` , `year_semester_id` , `year_id` ) VALUES (
    SELECT `a`.`course_details_id` , `a`.`course_id` , `b`.`year_semester_id` as `year_id` , `a`.`teacher_id` FROM `course_details` `a` INNER JOIN `year` `b`
)

这将在不需要PHP脚本的情况下将所有需要的数据插入新的MySQL表。

检查代码,如果您理解有困难,请告诉我。

请尝试使用,表1中的数据不适合表结构。表1中的数据只是代码本身使用的重要信息。目前教师id是补充的,不重要,也不会填写。但该模板可供将来添加。当前未设置年份\u id,因为它将从年份\u学期\u id表中填写,因此课程\u详细信息表中的值当前为空。。它们不再得到维护。看到了吗?相反,了解并使用or-将帮助您决定哪个。如果您创建一个关系表,则更容易做到这一点,创建一个包含两个外键的表,一个外键指向课程详细信息id,另一个外键指向学年学期id,这样您就可以为每门课程每年向该表中插入一个查询。当您想要得到最终的表时,您可以使用内部联接来联接表之间的关系,并选择两个表。非常感谢。我目前已经制作了一个包含不同信息的courses表,但是添加所做的更改甚至会使关系数据库更加模块化。非常感谢。这绝对是对问题的回答。当我有足够的代表时,我会保证给你们两个投票。事实上,看了这个答案,Brian,我测试了它,发现它还复制了课程详细信息id,这使得内部连接没有意义,因为多行具有相同的课程详细信息和课程id,这使得区分它们变得困难。啊,你说得对。我已更新查询以排除该字段。在select语句中,如果您只是以这种方式从数据库中读取数据,那么实际上并不需要它。或者,如果需要,您可以自己从表中选择键字段。insert也已更新,应与自动增量字段一起用作表的键。
SELECT `a`.`course_id` , `b`.`year_semester_id` as `year_id` , `a`.`teacher_id` FROM `course_details` `a` INNER JOIN `year` `b`
INSERT INTO `tablename` ( `course_id` , `year_semester_id` , `year_id` ) VALUES (
    SELECT `a`.`course_details_id` , `a`.`course_id` , `b`.`year_semester_id` as `year_id` , `a`.`teacher_id` FROM `course_details` `a` INNER JOIN `year` `b`
)