0

この説明は少し長くて複雑に思えるかもしれませんが、ご容赦ください。本質的に、私がやりたいことは、データベース内の別の mysql テーブル (B) から mysql テーブル (A) を埋めることですが、そのためには、テーブル (A) に値を複製して、収容するのに十分なエントリがあるようにする必要があります。表 B の値について。

では、より具体的な例を

テーブルの外観

course_details テーブル

course_details_id | コース ID | year_id | Teacher_id
+------------------+-----------+-----------+------ ------+
        1 1 設定予定 36
        2 2 設定予定 54
        3 3 設定予定 78
        4 4 設定予定 23

年表

year_semester_id | 年 | 学期
+-----+------+---------+
         1 2012 1
         2012年2月
         3 2012 3
         4 2012 4
         2013年5月1日
         2013年6月2日
         2013年7月 3
         2013年8月4日

テーブルをどのように見せたいか

course_details_id | コース 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 の合計になります。ここで、存在するすべての course_id に対して every 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`
)

これにより、PHP スクリプトを必要とせずに、必要なすべてのデータが新しい MySQL テーブルに挿入されます。

于 2013-01-20T02:25:15.067 に答える