7

次のような MySQL クエリがあります。

SELECT cp.plan_name, cp.plan_time FROM courses c
  INNER JOIN course_to_plan cpl   ON cpl.course_id = c.course_id
  INNER JOIN courseplans cp       ON cp.plan_id = cpl.plan_id
WHERE cpl.course_id = '$course_id';

これにより、たとえば次のようなデータが出力されます。

+----------------------------+-----------+
| plan_name                  | plan_time |
+----------------------------+-----------+
| Plan number one name       |         6 |
| Plan number two name       |         6 |
| Plan number three name     |        10 |
+----------------------------+-----------+

これらの行をフォーム送信時に新しいテーブルに挿入したいと考えています。

update.phpテーブルに値を挿入するようにコーディングを続けるにはどうすればよいnewtableですか?

if (isset($_POST['submit'])) {

 $course_id = $_POST['course_id'];


 $course_result = mysql_query 
    ("SELECT cp.plan_name, cp.plan_time FROM courses c
      INNER JOIN course_to_plan cpl   ON cpl.course_id = c.course_id
      INNER JOIN courseplans cp       ON cp.plan_id = cpl.plan_id
    WHERE cpl.course_id = '$course_id'");

 /* I want the result of the above rows to be inserted in the table
    newtable which has the columns plan_name, plan_time */

私は PHP と MySQL でまったく役に立たないことを認めたくありませんが、学ぼうとしています。結果を格納するためにある種の配列を作成し、挿入をループする必要があると思いますが、方法がわかりません。

4

2 に答える 2

18

知っておくべきことの 1 つは、クエリによって返される列の数が、挿入する列の数と一致する必要があることです。

"INSERT INTO NewTable(plan_name, plan_time)
    SELECT cp.plan_name, cp.plan_time 
    FROM courses c
         INNER JOIN course_to_plan cpl   ON cpl.course_id = c.course_id
         INNER JOIN courseplans cp       ON cp.plan_id = cpl.plan_id
    WHERE cpl.course_id = '$course_id'"

警告: を介した sql インジェクションに注意して$course_idください。

SELECT クエリが 2 つの列を返すため、INSERT ステートメントで 2 つの列を指定したことに注意してください。

テーブル内の列数がクエリによって返される列数と正確に一致する場合、列を指定する必要はありません。

于 2012-06-10T19:29:32.877 に答える
3

PHPコードについてはわかりませんが、mysqlクエリを挿入/選択に変更すると動作するはずです:

INSERT INTO newtable(plan_name, plan_time)
      SELECT cp.plan_name, cp.plan_time 
      FROM courses c
      INNER JOIN course_to_plan cpl   
            ON cpl.course_id = c.course_id
      INNER JOIN courseplans cp       
            ON cp.plan_id = cpl.plan_id
      WHERE cpl.course_id = '$course_id'
于 2012-06-10T19:29:23.820 に答える