一度に n 個のデータをループするビジネス ニーズがあります。データベースを挿入または更新するときに、単純にループ、挿入/更新を行うと、大量のデータベース リソースが消費されます
次は簡単な解決策です
データベースの挿入はバッチで更新できます。大量のデータが周期的に挿入される場合、挿入コマンドを実行し、tp の addAll() メソッドなど、最後の項目に到達したら一度に挿入します; (推奨学習: PHP ビデオ チュートリアル )
データベースの更新 if case when を使えば、一括で更新することもできます。
この記事では主にバッチ挿入について説明します。
注文の生成
通常のステートメントは次のとおりです:
INSERT INTO order (`goods_id`,`num`,`price`) VALUES (1,1,'10.00'); //封装成函数 function add_order($goods_id,$num,$price){ $db->query("INSERT INTO order (`goods_id`,`num`,`price`) VALUES ($goods_id,$num,$price)"); }
ショッピングカート内の 1,000 個の商品を一度に決済して 1,000 個の注文を生成するユーザーがいるとします;
for ($i=0;$i<1000;$i++){ $db->query("INSERT INTO order (`goods_id`,`num`,`price`) VALUES ($goods_id,$num,$price)"); } //这样的话会导致服务器资源占用过大,网站卡死 //所以,我们可以 $sql = "INSERT INTO order (`goods_id`,`num`,`price`) VALUES "; for ($i=0;$i<1000;$i++){ if($i==0){ $sql.="($goods_id,$num,$price)"; }else{ $sql.=",($goods_id,$num,$price)"; } } $db->query($sql);
これはおそらくこれを意味します。一括更新を実装するのは少し面倒なので、以下はバッチ更新のSQL実行文です
UPDATE tiyan.dm_user_cupboard SET `res_id` = CASE `id` WHEN 1041 THEN '1' WHEN 1058 THEN '1' WHEN 1055 THEN '1' END,`food_code` = CASE `id` WHEN 1041 THEN '68' WHEN 1058 THEN '47' WHEN 1055 THEN '49' END,`food_name` = CASE `id` WHEN 1041 THEN '红枣' WHEN 1058 THEN '莲藕' WHEN 1055 THEN '洋葱' END,`num` = CASE `id` WHEN 1041 THEN '2' WHEN 1058 THEN '3' WHEN 1055 THEN '2' END,`level` = CASE `id` WHEN 1041 THEN '2' WHEN 1058 THEN '2' WHEN 1055 THEN '2' END,`update_time` = CASE `id` WHEN 1041 THEN '2017-12-09 21:40:06' WHEN 1058 THEN '2017-12-09 21:40:06' WHEN 1055 THEN '2017-12-09 21:40:06' END WHERE id IN ( 1041,1058,1055 )
以上がPHPデータベース内の大量のデータを処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。