Il existe une exigence commerciale qui nécessite de boucler n éléments de données à la fois. Lors de l'insertion ou de la mise à jour de la base de données, une simple boucle, une insertion/une mise à jour consommera trop de ressources de base de données
<.>
Ce qui suit est une solution simple
Les insertions de base de données peuvent être mises à jour par lots Lorsqu'une grande quantité de données est insérée dans une boucle, les données peuvent être mises à jour. conservé en premier. Exécutez la commande d'insertion et insérez le dernier élément à la fois, comme la méthode addAll() de tp; (Apprentissage recommandé : Tutoriel vidéo PHP)
Mise à jour de la base de données si Si vous utilisez le cas quand, vous pouvez également mettre à jour par lots.Cet article parle principalement de l'insertion par lots
Générer une commande
L'instruction normale est :
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)"); }
Supposons qu'il y ait un utilisateur qui règle 1 000 articles dans le panier en commandes à la fois et génère 1 000 commandes
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);
C'est probablement ce que cela signifie. C'est un peu plus difficile de mettre en œuvre des mises à jour par lots, donc je. Je ne le publierai pas. Ce qui suit est l'instruction d'exécution SQL pour la mise à jour par lots
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 )
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!