ホームページ  >  記事  >  バックエンド開発  >  mysqlでphpを使用してバッチで挿入を処理するにはどうすればよいですか?たとえば、最初の 1,000 個のデータが処理された後、1,001 ~ 2,000 個のデータが処理され、さらに 2,001 ~ 3,000 個のデータが処理されます...すべてが処理されるまで?

mysqlでphpを使用してバッチで挿入を処理するにはどうすればよいですか?たとえば、最初の 1,000 個のデータが処理された後、1,001 ~ 2,000 個のデータが処理され、さらに 2,001 ~ 3,000 個のデータが処理されます...すべてが処理されるまで?

WBOY
WBOYオリジナル
2016-06-23 13:44:261252ブラウズ

テーブルメンバーのデータ量が大きくない場合は、一度に実行できます:

$q="select * from member'";$r=$obj_db->simplequery($q);while($a=$obj_db->fetchrow($r,DB_FETCHMODE_ASSOC)){   $id=$a[id];   $mccd=$a[cca]+$a[ccb];      $query="insert into mingxi (mid,mccd,mtime) values ('$id','$mccd','$time')";   $obj_db->simplequery($query);}


ただし、メンバーのデータ量が 100 万に達すると、実行タイムアウトエラーが発生します:
Fatal error : D で最大実行時間 30 秒を超えました:

では、たとえば、最初の 1000 個のデータが処理された後、1001 個から 2000 個のデータが処理され、さらに 2001 個から 3000 個のデータが処理されるようにするにはどうすればよいでしょうか。 ..すべてが処理されるまで?

$q="select * from member'";$r=$obj_db->simplequery($q);while($a=$obj_db->fetchrow($r,DB_FETCHMODE_ASSOC)){$i++;$ep=1000;//这里假设处理完第1个1000条后再处理第二个1000条,直至处理结束?   $id=$a[id];   $mccd=$a[cca]+$a[ccb];      $query="insert into mingxi (mid,mccd,mtime) values ('$id','$mccd','$time')";   $obj_db->simplequery($query);}



詳細なコードを書くのを手伝ってください、ありがとう!コードは隠蔽され、バックグラウンドで実行されるため、ページングを使用して 1 つずつ手動でクリックすることは考慮しないでください


ディスカッション (解決策) に返信する

insert into mingxi (mid,mccd,mtime) select を使用できます。 id、cca +ccb、メンバーからの時間

最近、各部分の読み取り、計算、処理、挿入を含む、約 560,000 個のデータを処理しました

ajax メソッドを使用して PHP ページをリクエストし、未処理のページを処理用に調整します、完了後にマークします。処理されたタグ ライブラリは js に返されます。ajax が戻り値を受け取った後 (最初にページに出力できます)、自身を呼び出してリクエストを再度開始します

560,000 個のアイテムが約 100,000 秒間実行されました。ページとプログラムは死ななかった

非常に遅いですが、私のニーズ(各データを分析して処理する必要がある)に関連しており、タイムアウトなどはありません

最近約560,000件を処理しました。

ajax メソッドを使用して PHP ページをリクエストし、処理のために未処理のタグ ライブラリを呼び出し、完了後に処理済みのタグ ライブラリをマークして、js に戻ります。 ajax は戻り値を受け取り (最初にページに出力できます)、自分自身を呼び出し、再度リクエストを開始します

560,000 項目が約 100,000 秒間実行され、ページとプログラムは停止しませんでした

非常に遅いですが、私のニーズ (各データを分析して処理する必要がある) に関連しており、



1 つの項目をクエリしない限り、このメソッドは非同期的に使用できません。そうしないとデータが失われる可能性があります
もちろん、1 日で実行する場合は問題ありません

最近では、各部分の読み取り、計算、処理、挿入を含む、約 560,000 個のデータを処理しました

ajax メソッドを使用して PHP ページを要求し、処理が完了していないページを呼び出します。 ajax が戻り値を受け取った後 (最初にページに出力できます)、自身を呼び出してリクエストを再度開始します

560,000 個のアイテムが約 100,000 秒間実行され、ページ プログラムは一度も停止しませんでした

非常に遅いですが、これは私のニーズ (各データを分析して処理する必要がある) に関連しており、タイムアウトなどはありません


このメソッドは非同期で使用できず、処理は返されます。 1 つのアイテムをクエリしてから 1 つを送信しない限り、最初に返される可能性があります。そうしないと、データが失われる可能性があります。もちろん、1 日で実行しても 2 日間オフにしなければ、失われることはありません。大きな問題です

なぜ最初に返されるのですか? 説明する例を教えてください

$offs = isset($_GET['offs']) ? $_GET['offs'] : 1;$sql = "select * from member limit $offs, 1000";//做你该做的事header("Location: $_SERVER[PHP_SELF]?offs=" . ($offs+1000));

これは、ページを常に更新していることを意味しますか? このページには 1 回しか実行できません。同じ質問がありますか?

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。