[英]Autopopulating a Mysql Table from Another Mysql Table with iterations through PHP
對此的解釋似乎冗長而令人費解,但請耐心等待。 本質上,我想從數據庫中的另一個mysql表(B)中填充一個mysql表(A),但為此,我需要重復表(A)中的值,以便有足夠的條目容納表B中的值。
現在來看一個更具體的例子
桌子的外觀
course_details_id | course_id | year_id | teacher_id +------------------+-----------+-----------+------------+ 1 1 To be Set 36 2 2 To be Set 54 3 3 To be Set 78 4 4 To be Set 23
year_semester_id | year | semester +-----------------+------+---------+ 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
代碼的外觀
<?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,year semester_id = 8,course_id = 3,year_semester_id = 1,依此類推...等等。這就是問題所在。
回顧一下代碼的工作原理,它計算Years表中year_semester_id的數量,然后將其減去1,這是course_id當前在course_details表中的次數,並用該數字進行復制。 該總數(重復項)加上原始course_id應該是year_semester_ids的總數。 我現在想為每個存在的課程ID插入每個year_semester_id,並循環遍歷,直到每個課程ID被考慮。 謝謝
在我看來,您可以輕松地完成您嘗試做的事情,而無需利用關系表來膨脹數據庫。 在這種情況下,如果我對您的理解正確,那么最終結果是,您希望對course_details
的所有行進行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腳本。
這就是我所說的檢查代碼,即您在理解上有困難,請告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.