【发布时间】:2013-01-20 01:13:21
【问题描述】:
对此的解释可能看起来有点冗长和复杂,但请多多包涵。本质上,我想要做的是从我的数据库中的另一个 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 的重复项,以匹配年表中存在的 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, year termemester_id =8, course_id=3, year_semester_id =1 etc.... 问题就出在这里。
回顾一下代码的工作原理,它计算 years 表中 year_semester_id 的数量,然后将该数字减去 1,即 course_id 当前在 course_details 表中的次数,并将其复制为该数字.这个总数(重复)加上原始 course_id 应该是 year_semester_ids 的总量。我现在想为存在的每个 course_id 插入每个 year_semester_id 并循环直到每个 course_id 都被计算在内。谢谢
【问题讨论】:
-
请尝试使用code formatting和read
-
表 1 中的数据不适合表结构。
-
表1中的数据只是用于代码本身的重要信息。现在的teacher_id是补充的,不重要也不会填写。但是该模板可供将来添加。 year_id 当前未设置,因为它是从 year_semester_id 表中填写的,因此在 course_details 表中的值当前为空。
-
Please, don't use
mysql_*functions in new code。它们不再维护and are officially deprecated。看到red box?改为了解prepared statements,并使用PDO 或MySQLi - this article 将帮助您决定哪个。 -
如果你做一个关系表,这样做会更容易,做一个有2个外键的表,1个指向course_details_id,另一个指向year_semester_id,这样你就可以查询到每年为每门课程插入该表。当你想得到最终的表时,可以使用 INNER JOIN 来连接表之间的关系,并选择两个表。
标签: php mysql database database-design