簡體   English   中英

通過PHP迭代從另一個Mysql表自動填充Mysql表

[英]Autopopulating a Mysql Table from Another Mysql Table with iterations through PHP

對此的解釋似乎冗長而令人費解,但請耐心等待。 本質上,我想從數據庫中的另一個mysql表(B)中填充一個mysql表(A),但為此,我需要重復表(A)中的值,以便有足夠的條目容納表B中的值。

現在來看一個更具體的例子

桌子的外觀

course_details表

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM