下記を条件とするphp+mysqlの

サンプルコードを頂けないでしょうか。

---------------------------------------
テーブルAからデータを全件(10000件程度)抽出し、
100件ずつテーブルBに移し変える。移し変えは、
100件ずつinsert&commitする形で行う。

なお、テーブルA、Bに存在する項目の名称(全角)は
下記2つです。

 種類
 金額 
-----------------------------------------

以上、よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/07/31 00:22:53
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:km1981 No.1

回答回数429ベストアンサー獲得回数49

ポイント500pt

こんな感じです。

冒頭の日本語コメントのところにパラメータを入れてください

MySQLおよびPHPの文字エンコードは正しく設定されているとします

SQLインジェクションのチェックはしていません

<?
$host   = DBホスト名
$user   = ログインユーザー名
$psw    = ログインパスワード
$dnmame = データベース名
$tblA   = テーブルAの名前
$tblB   = テーブルBの名前
$ofst   = 100;				//copy record numbers each transaction

//connect DB
$con = @mysql_connect($host, $user, $psw) or die("cannot connect {$host}");
@mysql_select_db($dbname, $con) or die('cannot select ' . $dbname);

//count records
$sql = "SELECT * FROM {$tblA} WHERE 1;";
$res = @mysql_query($sql, $con) ord die("cannot execute query: {$sql}");
$nums = mysql_num_rows($res);

//start transaction
$sql = "begin";
@mysql_query($sql, $con) ord die("cannot execute query: {$sql}");
for ($start = 1; $i <= $nums; $i += ofst) {
	//select records <= TABLE A
	$sql = "SELECT * FROM {$tblA} WHERE 1 LIMIT {$start},{$start + ofst};";
	$res = @mysql_query($sql, $con) ord die("cannot execute query: {$sql}");
	insert records => TABLE B
	while ($row = mysql_fetch_array($res)) {
		$sql = "INSERT INTO {$tblB} (`種類` ,`金額`) VALUES ({$row['種類']},{$row['金額']});";
		@mysql_query($sql, $con) ord die("cannot execute query: {$sql}");
	}
//commit
$sql = "commit";
@mysql_query($sql, $con) ord die("cannot execute query: {$sql}");

mysql_close($con);
?>

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません