• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:別テーブルからselectした値を他のテーブルにinsertしたいのですが、上手くできません)

別テーブルから値を取得して他のテーブルに挿入する方法

このQ&Aのポイント
  • 別のテーブルからSELECT文を使用して値を取得しているが、全ての値がINSERTされない問題が発生している。
  • 現在の方法では、テーブル内の1つの値しかINSERTされない。
  • SELECTされた全ての値をINSERTする方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • YEND77
  • ベストアンサー率56% (21/37)
回答No.3

『最後の1件』と『コードの全体像』から insert文は作られているけど、実行がされていないかもです。 たぶんループ外(while文)でinsert文を実施しているため 最後の1件だけがinsertされている。 insert文を実行している箇所を変更したくない場合は、 連結していけばいいのかななんて思います。 (件数によっては現実的ではないかもですが・・・) 上記の場合、while文の1つ上で $sql = ""; クエリ文の初期化をし、 $sql = "INSERT INTO db_test.tbl_test_new ( の部分を $sql .= "INSERT INTO db_test.tbl_test_new ( にする。

kodomo1234
質問者

補足

アドバイスありがとうございます。 別件で四苦八苦していたもので返信が遅くなりました。 >連結していけばいいのかななんて思います。 こんな考え方もあるのですね!! イレギュラーな方法のような気もしますが、 こうゆうのもありですよね! まだ、テストしていませんがこれでいけるような気がします。 ※新規テーブルに挿入する項目は多くはないからです。 基本は私も一般人(何しろ独学なもので・・・)なので。 でも、凄いことですね。 一般人の参考意見なのですね。 たくさんの事例を扱っていなければできない回答ですよね。 (請負業務だけが実績じゃないですものね。) 何しろ、チャチャも含めて回答して下さったのは、 YEND77様だけですから。 YEND77を尊敬いたします!! 実は、今作成しているwebアプリを携帯にも対応できるように実装しなくてはいけないので奮闘中なのです。 お忙しい中、 アドバイスを下さり、ありがとうございます。 検証結果を後日お知らせいたしますね。 よろしくお願いいたします。

その他の回答 (2)

  • YEND77
  • ベストアンサー率56% (21/37)
回答No.2

postした変数を使うにはやはりfetchでくるくる回すやり方ですかね。。。 確認ですが、フェッチループ内で、 $rst2 = mysql_query( $sql ); などとクエリの実行はしているんですよね。 あと、トランザクションはきってますか? あと、挿入されているデータは、最初の1件ですか?最後の1件ですか? select にorder by等をかけて順序性を規定して試して いただけますか? 追記: 前回のURLすこし張り間違いです。 http://ftp.ntu.edu.tw/MySQL/doc/refman/5.1/ja/insert-select.html

kodomo1234
質問者

補足

新たに回答していただきまして、 ありがとうございます。 よろしくお願いします。 >などとクエリの実行はしているんですよね。 実行しております。 >あと、挿入されているデータは、最初の1件ですか?最後の1件ですか? 最後の1件です。 >トランザクションはきってますか? 意味がよくわかりません。スミマセン。。。 調べてみます。 全体像が分からないとアドバイスをしずらいですよね。 ということで、 詳細コードを記述します。 function date_rst( $year, $month, $day, $add_date ) { $base = mktime( 0, 0, 0, $month, $day, $year ); $date = $add_date * 86400; $date_rst = $base + $date; return date( "Y-m-d 00:00:00", $date_rst ); } $sql = "SELECT db_test.tbl_test.test_id, db_test.tbl_test.base_days FROM db_test.tbl_test WHERE db_test.tbl_test.test00_id = '" . mysql_real_escape_string( $_SESSION['test00_id'] ) . "' AND db_test.tbl_test.base_days != '0000-00-00 00:00:00'"; $rst = mysql_query( $sql ); while ( $col = mysql_fetch_array( $rst ) ) { $year = substr ( $col['base_days'], 0, 4 ); $month = substr ( $col['base_days'], 5, 2 ); $day = substr ( $col['base_days'], 8, 2 ); $add_date = $col['base_days']; $rst_date = date_rst ( $year, $month, $day, $add ); $sql = "INSERT INTO db_test.tbl_test_new ( reg_date, test_id, test00_id, rst_date, state ) VALUES ( '" . date( 'Y-m-d H:i:s' ) . "', '" . mysql_real_escape_string( $col['test_id'] ) . "', '" . mysql_real_escape_string( $_SESSION['test00_id'] ) . "', '" . mysql_real_escape_string( $rst_date ) . "', '1' )"; } やりたいことはご理解いただけてると思いますので、 上記を上手く実行させたいのですが、 できますでしょうか? よろしくお願いします。

  • YEND77
  • ベストアンサー率56% (21/37)
回答No.1

mysql5 はしらないのですが、、、 insert into select の構文が簡単かと思います。 (フェッチでやる方法もあるかと思いますが・・・) http://ftp.ntu.edu.tw/MySQL/doc/refman/5.1/ja/insert.html

kodomo1234
質問者

補足

回答ありがとうございます。 >insert into select の構文が簡単かと思います。 この場合、仮にtbl_Aのフィールド値“data”に変更を加えた場合は、 どのように対応したら良いのでしょうか? 例) $sql = "SELECT tbl_A.id, tbl_A.data FROM tbl_A "; $rst = mysql_query( $sql ); while ( $col = mysql_fetch_array( $rst ) ) { $add = "$_POST['add']"; $data = ( $col['data'] + $add );   ↑ 追加。実際はもう少し複雑なのですが・・・・ $sql = "INSERT INTO tbl_B ( date, id, data ) VALUES ( '" . date( 'Y-m-d' ) . "', '" . mysql_real_escape_string( $col['id'] ) . "', '" . mysql_real_escape_string( $data ) . "' ←変数になった場合 )"; } 引き続き、アドバイスなどよろしくお願いします。

関連するQ&A