こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

1つのテーブルから複数のテーブルへのデータ振分け

MySQLを使用して、tableAというテーブルのデータを
tableB,tableC,tableDというテーブルに振り分けたいと思っています。
1日1回、自動的に行いたいと思っています。

たとえば、tableAのテーブル構成が下記のようなもので
==================
name
sex
birth
address
phone
email
company
==================

name,address,phoneはtableBに

name,sex,birthはtableCに

name,companyはtableDに分けるというような
イメージです。


私の考えでは、下記のようなSQL文をPHPから呼び出して、タスクで
実行させてそれぞれ別のテーブルに振り分けようと思っている
のですが、、もっと良いツールや方法があればお教えいただけ
ませんでしょうか。

宜しくお願いいたします。

----------------------------------------------------------------------------------------------------
INSERT INTO tableB (name,address,phone) SELECT tableA.name,tableA.address,tableA.phone FROM tableA
AND
INSERT INTO tableC (name,sex,birth) SELECT tableA.name,tableA.sex,tableA.birth FROM tableA
AND
INSERT INTO tableD (name,company) SELECT tableA.name,tableA.company FROM tableA;
----------------------------------------------------------------------------------------------------

投稿日時 - 2011-07-01 17:56:07

QNo.6847454

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

毎回3回SQLを発行するがめんどうということ?
プロシージャーをつくっておけばよいのでは?

DROP PROCEDURE IF EXISTS INSERT_A_TO_BCD;
DELIMITER //
CREATE PROCEDURE INSERT_A_TO_BCD()
BEGIN
START TRANSACTION;
INSERT IGNORE INTO tableB (name,address,phone) SELECT name,address,phone FROM tableA;
INSERT IGNORE INTO tableC (name,sex,birth) SELECT name,sex,birth FROM tableA;
INSERT IGNORE INTO tableD (name,company) SELECT name,company FROM tableA;
COMMIT;
END
//
としておけば、あとはINSERT_A_TO_BCDをCALLしてやるだけです。

CALL INSERT_A_TO_BCD;

投稿日時 - 2011-07-01 21:14:30

お礼

早速のお返事ありがとうございます。

まだ初心者で、ストアドプロシージャーを使用したことがなく、
発想もありませんでした。

深夜のタスクにする予定なので、3回SQLを発行しても負荷の問題は
なく、面倒ということもありませんが、これを機に勉強してみます!

ありがとうございます。

投稿日時 - 2011-07-04 11:37:26

あなたにオススメの質問