プロが教えるわが家の防犯対策術!

Mysqlのデータベースに2つの全く同じ構造のテーブル(table1とtable2)があります。phpを介してtable1のデータを一件づつ手動でtable2に移動したいのですが、どのような方法がありますか?

それ以前の問題として、2つのtable間でデータを移動できるものなのでしょうか?

A 回答 (2件)

> 一度の処理でinsertとdeleteができれば便利なのですが。


PostgreSQL等では複数クエリの発行が出来ますが、MySQLのmysql_query()ではサポートしていないようです。
http://jp.php.net/manual/ja/function.mysql-query …

こんな感じで関数でも作っておけば特に面倒は無い気がしますが。
function moveTable($id){
$rs = mysql_query("INSERT INTO table2 SELECT * FROM table1 WHERE id={$id}");
if($rs){
$rs2 = mysql_query("DELETE FROM table1 WHERE id={$id}");
if($rs2){
return TRUE;
}else{
return FALSE;
}
}else{
return FALSE;
}
}
なお、InnoDBで作成したテーブルならトランザクションにも対応しているので、より確実になりますね。

参考まで。
    • good
    • 0
この回答へのお礼

度々どうもありがとうございます。
教えて頂いたとおりで動きました。
ありがとうございました。

お礼日時:2007/08/09 17:25

> それ以前の問題として、2つのtable間でデータを移動できるものなのでしょうか?


移動というのは、コピー&元データ削除の事です。
たとえば、id=hogeのデータをコピーする時は、
INSERT INTO table2 SELECT * FROM table1 WHERE id=hoge
のクエリを実行すれば簡単にコピー出来ます。その後、
DELETE FROM table1 WHERE id=hoge
とすればtable1のデータが削除出来ますので、移動完了となります。

例えばデータをチェックしてから何らかのアクションをしたい場合は
SELECT * FROM table1 WHERE id=hoge
としてデータを取得し、データチェック、データ整形後、
INSERT INTO table2 VALUES(........)
でtable2にデータをインサート、その後上記DELETEで削除するだけです。
    • good
    • 0
この回答へのお礼

どうもありがとうございます。
教えて頂いたとおり、うまく動くことができました。
ただ、INSERT INTO table2 SELECT * FROM table1 WHERE id=hoge
と DELETE FROM table1 WHERE id=hoge を 一度のクエリで対処することは無理なのでしょうか?
一度の処理でinsertとdeleteができれば便利なのですが。

お礼日時:2007/08/08 10:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!