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 :

[SQL] Grosse requête SQL + calculs


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
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 19
    Par défaut [SQL] Grosse requête SQL + calculs
    salut à tous
    bon alors brevement
    je dois remonter tous les enregistrement dune table CA = chiffres d'affaires
    cette table contient les valeurs du chiffres d'affaire journalier de chaque magasin pour chaque jour de chaque année depuis 1994

    CA :
    id_ca int auto increment
    num_mag varchar = numéro du magasin
    date_ca date = date du ca
    valeur_ca : montant du ca du jour pour le magasin

    donc je fais un select sur ma table et avec une "moulinette" je dois calculer le ca mensuel de chaque magasin + le ca de lannée -1 et le ca de lannée -2 , avec les pourcentage daugmentation ou diminution
    et bien sur afficher le tout sur ma page

    et evidemment le script est super long ...

    donc je chercher une solution pour diminuer le temps d'execution, sans changer le timeout du serveur bien evidemment

    merci à tous

  2. #2
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    Pas facile d'optimiser du code sans le voir

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 19
    Par défaut
    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
     
    echo '<TABLE border width="98%" align="center" cellspacing="1"><tr align="center" bgcolor="#ffc21c"><th>Code Magasin</th><th>Nom Magasin</th><th>Chiffres d\'affaires</th><th>%</th><th>CA Années -1 lissé</th><th>CA Années -2 lissé</th><th>Derniere date saisie</th><th>Derniere valeur saisie</th></tr>';
     
     
     
    		//requete pour recup les derniers infos du ca mag 
     
     
     
    		$req_mag="select * from structure where login_struct like 'mag%' order by login_struct;";
    		$result_mag=mysql_query($req_mag) or die(mysql_error().' - '.$req_mag);
     
    		while ($ligne_mag=mysql_fetch_array($result_mag))
    		{
    			$ca_annee=0;
    			$ca_annee_1=0;
    			$ca_annee_2=0;
     
    			//récupération ca en cours ou sélectionné
     
    			$req_ca_mag="select valeur_ca, date_ca from ca where num_struct like '".substr($ligne_mag["login_struct"],4)."' and DAY(date_ca)>=1 and DAY(date_ca)<=".$jour." and YEAR(date_ca) = '".$annee."' and MONTH(date_ca)='".$mois."';";
     
    			//$req_ca_mag="select sum(valeur_ca) as som from ca where num_struct like '".substr($ligne_mag["login_struct"],4)."' and date_ca between '".$annee."-".$mois."-01' and '".$annee."-".$mois."-".$jour."';";
    			//echo $req_ca_mag.'<br>';
     
    			$result_ca_mag=mysql_query($req_ca_mag) or die(mysql_error().' - '.$req_ca_mag);
    			//$ligne_ca_mag=mysql_fetch_array($result_ca_mag);
    			//$ca_annee=$ligne_ca_mag["som"];
     
    			while($ligne_ca_mag=mysql_fetch_array($result_ca_mag))
    			{
    				$ca_annee+=$ligne_ca_mag["valeur_ca"];
    				$last_valeur=$ligne_ca_mag["valeur_ca"];
    				$last_date=$ligne_ca_mag["date_ca"];
    			}
     
    			//récupération ca -1 lissé
    			$req_ca_mag_1="select sum(valeur_ca) as som from ca where num_struct like '".substr($ligne_mag["login_struct"],4)."' and YEAR(date_ca) = '".($annee-1)."' and MONTH(date_ca)='".$mois."';";
    			//echo $req_ca_mag_1.'<br>';
    			$result_ca_mag_1=mysql_query($req_ca_mag_1) or die(mysql_error().' - '.$req_ca_mag_1);
    			$ligne_ca_mag_1=mysql_fetch_array($result_ca_mag_1);
    			$ca_annee_1=$ligne_ca_mag_1["som"];
     
    			//while($ligne_ca_mag_1=mysql_fetch_array($result_ca_mag_1))
    			//{
    			//	$ca_annee_1+=$ligne_ca_mag_1["valeur_ca"];
    			//}
     
     
    			//récupération ca-2 lissé
    			$req_ca_mag_2="select sum(valeur_ca) as som from ca where num_struct like '".substr($ligne_mag["login_struct"],4)."' and YEAR(date_ca) = '".($annee-2)."' and MONTH(date_ca)='".$mois."';";
    			//echo $req_ca_mag_2.'<br>';
    			$result_ca_mag_2=mysql_query($req_ca_mag_2) or die(mysql_error().' - '.$req_ca_mag_2);
    			$ligne_ca_mag_2=mysql_fetch_array($result_ca_mag_2);
    			$ca_annee_2=$ligne_ca_mag_2["som"];
     
    			//while($ligne_ca_mag_2=mysql_fetch_array($result_ca_mag_2))
    			//{
    			//	$ca_annee_2+=$ligne_ca_mag_2["valeur_ca"];
    			//}
     
    				$ca_lisse_1=round(($ca_annee_1/$nb_jour_mois)*($jour-1));
    				$ca_lisse_2=round(($ca_annee_2/$nb_jour_mois)*($jour-1));
     
     
    				//echo $ca_annee_1.' / '.$nb_jour_mois .' * '.($jour-1);
    				echo '<TR align="center">';
    				echo '<TD>'.substr($ligne_mag["login_struct"],4).'</TD>';
    				echo '<TD>'.$ligne_mag["nom_struct"].'</TD>';
    				if ($ca_annee<>0)
    				{
    					echo '<TD>'.round($ca_annee).'</TD>';
    				}
    				else
    				{
    					echo '<TD> - </TD>';
    				}
     
     
     
    				if (($ca_lisse_1<>0) and ($ca_annee<>0)) 
    				{
    					echo '<TD>'.round((($ca_annee-$ca_lisse_1)*100)/$ca_lisse_1,2).'&nbsp;%</TD>';
    				}
    				else
    				{
    					echo '<TD> - </TD>';
    				}
    				echo '<TD>'.$ca_lisse_1.'</TD>';
    				echo '<TD>'.$ca_lisse_2.'</TD>';
    				echo '<TD>'.$last_date.'</TD>';
    				echo '<TD>'.round($last_valeur).'</TD>';
    				echo '</TR>';
     
    		set_time_limit(30);
    voila j'espere que avec un peu de code ça sera plus "clair"

  4. #4
    Invité
    Invité(e)
    Par défaut
    deja je separerais les requetes et l'affichage, je mexplique :
    je fais mon traitement et je sauvegarde les valeurs dans un tableau
    puis je libere les ressources sql
    puis jaffiche mon tableau

    mais bon a voir peut etre quil y a mieux a faire

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 19
    Par défaut
    Citation Envoyé par rbaatouc
    deja je separerais les requetes et l'affichage, je mexplique :
    je fais mon traitement et je sauvegarde les valeurs dans un tableau
    puis je libere les ressources sql
    puis jaffiche mon tableau

    mais bon a voir peut etre quil y a mieux a faire
    a peut etre, faudrait essayer

    Citation Envoyé par JWhite
    Déjà je vois pas l'intérêt de l'utilisation des LIKE, une comparaison classique avec = (plus économique) semble suffire.
    moi a lecole on ma dit , pour les chaines tu met un like, japplique betement ce que ma dit mon prof de sql lannée derniere, je savais meme pas que ça marchait avec "="

  6. #6
    Invité
    Invité(e)
    Par défaut
    j'eviterais aussi les select * et je mettrais le noms des champs qui m'interessent

  7. #7
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    Déjà je vois pas l'intérêt de l'utilisation des LIKE, une comparaison classique avec = (plus économique) semble suffire.

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

Discussions similaires

  1. Requête sql count(*) et divers calcul
    Par Smoki28 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 07/07/2014, 13h40
  2. [AC-2003] Requête sql sur requête sql en vba
    Par Smoovy35 dans le forum Access
    Réponses: 3
    Dernier message: 17/01/2011, 20h25
  3. [Requête/SQL]ajouter un champ calculé dans une table
    Par zougna dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 17/04/2007, 19h09
  4. [SQL] Problème requête sql,rajouter une valeur,checbox
    Par snakejl dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 23/06/2006, 11h18
  5. [VB.NET] [SQL] Pb requête sql, récupérer des params. ?
    Par Pleymo dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/02/2005, 20h15

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