
PHPとMySQLで100万件のデータを登録する方法に困っております。
1.PHPで100万回ループして数字をランダムで取得し一意の数字を配列に格納。
⇒データ量が多すぎてタイムアウトしてしまいます。いい方法はありますか?
while($i<1000000){
$h = sprintf("%07d",mt_rand(1,1000000));
if(!array_search($h,$val)){
array_push($val,$h);
$i++;
}
}
2.またデータベースはMySQLを使用しようかと考えていますが、一気に登録する方法など効率のいいやり方はありますでしょうか?
No.2ベストアンサー
- 回答日時:
MySQLのバージョンにもよるでしょうけど、MySQL側の処理でやれば
100万件のデータくらいはすんなり作れそうですけどねぇ・・・
たとえば、hogeというテーブルにデータが1つ入っている状態から
INSERT INTO hoge SELECT * FROM `hoge`
を19回やれば100万件のデータになりますよね?
その後必要なフィールドに対して
UPDATE hoge SET data=RAND()
的なことをやれば、できあがり
回答ありがとう御座います。返信遅くなり申し訳ございません。
質問の補足になってしまいますが、MySQLのRAND関数を使用してデータを登録しようと思ったのですが、重複するデータがあるとだめなんです。
No.4
- 回答日時:
結局やりたいのは、1~100万までの数字をランダムに並び替えたモノをMySQLに入れるってコトですよね?
なら、まずは普通に1から100万までをそのまま配列にいれましょう。
for($i=1;$i<=1000000;$i++){
$array[] = $i;
}
で、それをランダムに並べ替え。
shuffle($array);
あとはMySQLに流し込みましょう。
foreach($array as $value){
$values .= ",('".$value."')";
}
$sql = "insert `TABLE`(`カラム`) values".substr($values,1);
普通この程度のことなら10秒もかからないと思うけど、環境によってset_time_limit() で時間を延ばすなりすればいいかも。
あとは、MySQLに流し込むのに1万件ごとにやるとかね。
No.3
- 回答日時:
phpの処理でこけてるのか、mysqlに突っ込むところでこけてるのか
定かではありませんが、「MySQLを使用しようと」ということは、
phpの処理でこけてるのでしょうか?
7桁のデータ100万件なので、たかだか7MB分なので、メモリがあふれるってことはないでしょうけど・・
となると、アレイに一気にためこむのではなく、都度ファイルに書き出していって、memphisさんのおっしゃるように、mysqlには、LOAD DATAで突っ込むのが早いしいいかと思います。
回答ありがとう御座います。返信遅くなり申し訳ございません。
PHPで実行してprint_rで配列を表示しているだけなのですが、処理が多すぎてapacheでタイムアウトしてしまいます。
apacheのタイムアウト時間を延ばしても延々と処理が続いてしまっている状況です。
MySQLに取り込むのはLOAD DATAを使用することにします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP ランキングを表示する際の画像の大きさを固定することは可能でしょうか? <?php if ( has_ 1 2022/07/21 14:55
- フリーソフト 色々な形式の個人情報を後で参照しやすいようWindow10で管理したいのですが、どんな方法があるの? 1 2023/04/29 16:46
- MySQL [1000地域 × 10カテゴリー = 1万件のテーブル]!グループ化? 1 2023/06/14 23:56
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- その他(データベース) 業務用のデータベースサーバーの選び方について 4 2022/11/22 10:22
- 不動産業・賃貸業 100万円の中古マンションを購入する時の概算費用教えて下さい。 2 2022/08/22 21:35
- その他(プログラミング・Web制作) COBOL数値転記をCOPY句内での仕様 6 2022/06/15 18:48
- Excel(エクセル) マクロを簡潔にしたい 6 2022/09/16 10:37
- その他(SNS・コミュニケーションサービス) 書き込んだ場合、同サイトの同ページに出てこない? 1 2022/05/24 02:44
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
STLのvectorで作った配列をメン...
-
Smarty 三次元配列を使いたい
-
再帰的に処理をする方法
-
mallocで char *型の配列を確...
-
ファイルの書き込みについて教...
-
テキストエリアに入力した複数...
-
特定の文からメールアドレスの...
-
array_mapの再帰処理がうまく行...
-
PHPとMySQLで100万件のデータを...
-
Pascalの手続きについて
-
複数のforeachをまとめるには
-
PHPでユニークIDを作る
-
Delphiで別unitで宣言した「TAr...
-
$_SESSIONに二次元配列を使える...
-
配列をループでたくさん宣言し...
-
Smartyで添え字が全て文字列の...
-
C言語でCSVファイルの行数を読...
-
CSVファイルの最終行のデー...
-
PHPにてクラスを配列にすること...
-
PHPの配列について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語の配列をPush(追加)する...
-
数独かを判断するプログラム
-
行列
-
読み(あ行~わ行)ごとに分け...
-
cakephpでのトランザクション処...
-
delphi 2次元配列がわかりません
-
Perlで重複行を削除したい
-
mallocで char *型の配列を確...
-
STLのvectorで作った配列をメン...
-
連想配列で値が空だったら、要...
-
C言語 最大値と最小値を求めて...
-
配列の要素(value)に、変数を...
-
配列の添え字が小数だとどうなる?
-
特定の文からメールアドレスの...
-
CArrayの要素としてCStringArra...
-
pg_copy_fromの使い方について...
-
CArrayのソート
-
PHPでユニークIDを作る
-
array_mapの再帰処理がうまく行...
-
verilogで、配列の一部をタスク...
おすすめ情報