
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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ショッピングカートで$_SESSION...
-
再帰関数を用いて配列の合計を...
-
多次元配列の重複削除
-
多次元配列を2次元の連想配列で...
-
MySQLのデータをPHPで多次元...
-
2次元配列のソート
-
C言語の2次元配列における行・...
-
phpのエラーについて
-
フォルダ階層をHTMLTable化する...
-
複数のforeachをまとめるには
-
2次元配列CSVのソート
-
PHPでユニークIDを作る
-
arrayをどうやって表示するのか?
-
C言語の配列をPush(追加)する...
-
arrayである値を持った要素のみ...
-
charのポインタについて
-
構造体を動的に確保&解放
-
【PHP】配列を連想配列に
-
Pascalの手続きについて
-
クラスの中で関数・変数を使う方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語の配列をPush(追加)する...
-
STLのvectorで作った配列をメン...
-
特定の文からメールアドレスの...
-
読み(あ行~わ行)ごとに分け...
-
配列の要素(value)に、変数を...
-
配列の添え字が小数だとどうなる?
-
Delphiで別unitで宣言した「TAr...
-
MYSQLとPHPによって取得する多...
-
verilogで、配列の一部をタスク...
-
多次元配列の重複削除
-
CArrayのソート
-
ファイルの書き込みについて教...
-
mallocで char *型の配列を確...
-
bashで配列から、特定の要素を...
-
array_intersectで空欄を比較し...
-
C言語 最大値と最小値を求めて...
-
pg_copy_fromの使い方について...
-
複数のforeachをまとめるには
-
2つの連想配列を比較して一致す...
-
array_mapの再帰処理がうまく行...
おすすめ情報