Bonjour,

J'ai une table avec plusieurs milliers de produits (+80000) et je veux appliquer une marge différente pour chaque tranche de prix.
Pour cela j'ai crée un script php, le problème est que le script met 20 minutes pour s’exécuter complètement et quand je regard le status des requêtes avec mytop elle s’exécutent très lentement, à peine 60/s.

Je demande aux connaisseurs de m'indiquer s'il y a une autre façon afin de l'optimiser


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
 
 
<?php
try
{
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
        $bdd = new PDO('mysql:host=localhost;dbname=db', 'user', 'password');
 
        // Selection des produits
        $rep = $bdd->query('SELECT id_product, wholesale_price, price FROM ps_product');
 
		// Préparation de la requête SQL
		$req_price = $bdd->prepare('UPDATE ps_product SET price = :prix WHERE id_product = :id_prod');
 
		//while ($data = $rep->fetch())
		foreach ( $rep AS $data )
			{			
					// Si le prix est entre 0 et 5 euros, mettre le prix a 6 euros
					if ( $data['wholesale_price'] > 0 AND $data['wholesale_price'] <= 5 )
							{
									$prix = 6;
									$req_price->execute(array(
															'prix' => $prix,
															'id_prod' => $data['id_product'])
													);
									unset($prix); 
							}
 
					// Si le prix est entre 5 et 10 euros, application d'une marge de 30%
					if ( $data['wholesale_price'] >= 5 AND $data['wholesale_price'] <= 10 )
							{
									$prix = $data['wholesale_price'] + $data['wholesale_price'] * 30/100;
									$req_price->execute(array(
															'prix' => $prix,
															'id_prod' => $data['id_product'])
													);
									unset($prix); 
							}
 
					// Si le prix est entre 10 et 50 euros, application d'une marge de 20%
					if ( $data['wholesale_price'] > 10 AND $data['wholesale_price'] <= 50 )
							{
									$prix = $data['wholesale_price'] + $data['wholesale_price'] * 20/100;
									$req_price->execute(array(
															'prix' => $prix,
															'id_prod' => $data['id_product'])
													);
									unset($prix);  
							}
 
					// Si le prix est entre 50 et 150 euros, application d'une marge de 15%
					if ( $data['wholesale_price'] > 50 AND $data['wholesale_price'] <= 150 )
							{
									$prix = $data['wholesale_price'] + $data['wholesale_price'] * 15/100;
									$req_price->execute(array(
															'prix' => $prix,
															'id_prod' => $data['id_product'])
													);
									unset($prix); 
							}
 
					// Si le prix est entre 150 et 400 euros, application d'une marge de 10%
					if ( $data['wholesale_price'] > 150 AND $data['wholesale_price'] <= 400 )
							{
									$prix = $data['wholesale_price'] + $data['wholesale_price'] * 10/100;
									$req_price->execute(array(
															'prix' => $prix,
															'id_prod' => $data['id_product'])
													);
									unset($prix); 
							}
 
					// Si le prix est entre 400 et 700 euros, application d'une marge de 8%
					if ( $data['wholesale_price'] > 400 AND $data['wholesale_price'] <= 700 )
							{
									$prix = $data['wholesale_price'] + $data['wholesale_price'] * 8/100;
									$req_price->execute(array(
															'prix' => $prix,
															'id_prod' => $data['id_product'])
													);
									unset($prix); 
							}
 
					// Si le prix est entre 700 et 1500 euros, application d'une marge de 7%
					if ( $data['wholesale_price'] > 700 AND $data['wholesale_price'] <= 1500 )
							{
									$prix = $data['wholesale_price'] + $data['wholesale_price'] * 7/100;
									$req_price->execute(array(
															'prix' => $prix,
															'id_prod' => $data['id_product'])
													);
									unset($prix); 
							}                       
 
 
					// Si le prix est superieur à 1500 euros, application d'une marge de 6%
					if ( $data['wholesale_price'] > 1500 )
							{
									$prix = $data['wholesale_price'] + $data['wholesale_price'] * 6/100;
									$req_price->execute(array(
															'prix' => $prix,
															'id_prod' => $data['id_product'])
													);
									unset($prix);  
							}              
 
			}
 
$rep->closeCursor();    
 
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage());
}
 
 
?>
Merci d'avance