IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Optimisation de script 2 [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 11
    Par défaut Optimisation de script 2
    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

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bonsoir,

    Il faut faire ce genre de mise à jour directement sur le serveur de base de données, comme ça :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    UPDATE
       ps_product
    SET
       price = (
          CASE
             WHEN (wholesale_price <=  5)   THEN 6
             WHEN (wholesale_price <= 10)   THEN wholesale_price * 0.3
             WHEN (wholesale_price <= 50)   THEN wholesale_price * 0.2
             WHEN (wholesale_price <= 150)  THEN wholesale_price * 0.15
             WHEN (wholesale_price <= 400)  THEN wholesale_price * 0.10
             WHEN (wholesale_price <= 700)  THEN wholesale_price * 0.08
             WHEN (wholesale_price <= 1500) THEN wholesale_price * 0.07
          ELSE wholesale_price * 0.06
          END
       )
    Cela doit être instantané non ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 11
    Par défaut
    Bonjour,

    effectivement le changement est impressionnant! 2s au lieu de 30 minutes.

    Merci beaucoup.


    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
    		$bdd->exec('UPDATE
    					   ps_product
    					SET
    					   price = (
    						  CASE
    							 WHEN (wholesale_price <=  5)   THEN 6
    							 WHEN (wholesale_price <= 10)   THEN wholesale_price * 1.3
    							 WHEN (wholesale_price <= 50)   THEN wholesale_price * 1.2
    							 WHEN (wholesale_price <= 150)  THEN wholesale_price * 1.15
    							 WHEN (wholesale_price <= 400)  THEN wholesale_price * 1.10
    							 WHEN (wholesale_price <= 700)  THEN wholesale_price * 1.08
    							 WHEN (wholesale_price <= 1500) THEN wholesale_price * 1.07
    						  ELSE wholesale_price * 1.06
    						  END
    					   )');

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Optimisation de scripts PHP/MySQL
    Par DgG dans le forum PHP & Base de données
    Réponses: 368
    Dernier message: 20/11/2013, 18h59
  2. Optimiser vos scripts
    Par djibril dans le forum Langage
    Réponses: 33
    Dernier message: 11/06/2009, 16h10
  3. [Oracle] Optimisation de script
    Par johnkro dans le forum PHP & Base de données
    Réponses: 26
    Dernier message: 12/07/2006, 10h33
  4. [Débutant] Accélérer et optimiser ses scripts PHP
    Par Metallic-84s dans le forum Langage
    Réponses: 6
    Dernier message: 24/03/2006, 12h37
  5. [MySQL] [Script]Optimisation de scripts Php/MySQL (2)
    Par copy dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 27/08/2004, 08h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo