0

对此的解释可能看起来有点冗长和复杂,但请多多包涵。本质上,我想要做的是从我的数据库中的另一个 mysql 表(B)填充一个 mysql 表(A),但为了这样做,我需要复制表(A)中的值,以便有足够的条目来容纳对于表 B 中的值。

现在举一个更具体的例子

表格的外观

course_details 表

course_details_id | course_id | 年号 | 教师编号
+--------+-----------+------------+------ ------+
        1 1 待设置 36
        2 2 待设置 54
        3 3 待设置 78
        4 4 待设置 23

年表

year_semester_id | 年份 | 学期
+-----------------+-----+----------+
         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 | 年号 | 教师编号
-------------------+------------+---------+-------- ----+
         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_details 表中创建每个 course_id 的副本,以匹配存在于 years 表中的 year_semester_id 的数量,这是完美的。问题在于在 course_details 表的每个对应表槽中插入 year_semester_id。

也就是说,保证当 course_id =1 , year_semester_id=1, course_id=1, year_semester_id =2,....course_id=1, year_semester_id=8, course_id=2, year_semester_id=1, course_id=2, year_semester_id= 2......course_id=2,yearsemester_id=8,course_id=3,year_semester_id=1 等等......这就是问题所在。

回顾一下代码的工作原理,它计算 years 表中 year_semester_id 的数量,然后将该数字减去 1,即 course_id 当前在 course_details 表中的次数,并将其复制为该数字。这个总数(重复)加上原始 course_id 应该是 year_semester_ids 的总量。我现在想为存在的每个 course_id 插入每个 year_semester_id 并循环遍历,直到每个 course_id 都被计算在内。谢谢

4

2 回答 2

0

这就是我所说的检查代码,如果你理解有困难,请告诉我。

于 2013-01-20T02:38:33.327 回答
0

在我看来,您尝试做的事情可以通过利用关系表轻松完成,而不会使数据库膨胀。在这种情况下,如果我对您的理解正确,这里的最终结果是您希望course_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 结果集中返回您想要的数据。如果您想将该数据插入表中,只需确保该表具有正确的列,并将该course_Details_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`
)

这应该将您需要的所有数据插入到新的 MySQL 表中,而无需 PHP 脚本。

于 2013-01-20T02:25:15.067 回答