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 :

2 requêtes sql 1 tableau while [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Invité
    Invité(e)
    Par défaut 2 requêtes sql 1 tableau while
    Bonjour,

    Sur une de mes pages, j'utilisais ce script en pensant qu'il fonctionnait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // TOTAL GENERAL FIXE
    $query_total_general_fixe = $bdd->query('SELECT annee, COALESCE(SUM(abonnement),0) + COALESCE(SUM(consommation),0) + COALESCE(SUM(autres),0) - COALESCE(SUM(remise),0) as total_general_fixe FROM TEL_FIXE_ANALYSE GROUP BY annee');
    $query_total_general_mobile = $bdd->query('SELECT annee, COALESCE(SUM(abonnement),0) + COALESCE(SUM(consommation),0) + COALESCE(SUM(autres),0) - COALESCE(SUM(remise),0) as total_general_mobile FROM TEL_MOBILE_ANALYSE GROUP BY annee');
    while ($row_fixe = $query_total_general_fixe->fetch()) {
        while ($row_mobile = $query_total_general_mobile->fetch())
        $total_general[] = (($row_fixe['total_general_fixe'] + $row_mobile['total_general_mobile']) * 1.196);   
    }
    $query_total_general_fixe->closeCursor();
    $query_total_general_mobile->closeCursor();
    Mais en faite, au moment de l'addition, la ligne $row_fixe est toujours la même. Il ne fait pas ligne par ligne, seulement pour mobile.

    exemple : array_fixe = (15, 30, 45) et array_mobile = (1, 5, 10).
    Il va additionner les ligne des mobiles mais toujours avec le 15. Au lieu de faire 15 + 1, 30 + 5.... etc....

    Du coup, je voulais savoir si le code pouvait être adapté en l'état ? Ou bien si je devais faire 2 boucles while puis utiliser un type array_merge avec un 3ème tableau... Enfin une fonctionne array qui permet d’additionner ligne par ligne.

    PS: Les 2 tables n'ont aucun lien sur la bdd sql

    Merci
    Dernière modification par Invité ; 22/01/2014 à 15h53.

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Déjà, je pense que tu veux regrouper les données par année.
    Personnellement, je ferais le parcours pour chaque requête, en mettant les résultats dans un tableau indexé par l'année, pour pouvoir faire le calcul ensuite.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Si j'ai bien compris
    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
    // TOTAL GENERAL FIXE
    $query_total_general_fixe = $bdd->query('SELECT annee, COALESCE(SUM(abonnement),0) + COALESCE(SUM(consommation),0) + COALESCE(SUM(autres),0) - COALESCE(SUM(remise),0) as total_general_fixe FROM TEL_FIXE_ANALYSE GROUP BY annee');
    $query_total_general_mobile = $bdd->query('SELECT annee, COALESCE(SUM(abonnement),0) + COALESCE(SUM(consommation),0) + COALESCE(SUM(autres),0) - COALESCE(SUM(remise),0) as total_general_mobile FROM TEL_MOBILE_ANALYSE GROUP BY annee');
    while ($row_fixe = $query_total_general_fixe->fetch()) 
    {
        $total_general[$row_fixe['annee']] = $row_fixe['total_general_fixe'] * 1.196;
    }
    while ($row_mobile = $query_total_general_mobile->fetch())
    {
    	if (isset($total_general[$row_fixe['annee']]))
    		$total_general[$row_fixe['annee']] += $row_mobile['total_general_mobile'] * 1.196;
    	else
    		$total_general[$row_fixe['annee']] = $row_mobile['total_general_mobile'] * 1.196;
    }
    $query_total_general_fixe->closeCursor();
    $query_total_general_mobile->closeCursor();

  4. #4
    Invité
    Invité(e)
    Par défaut
    Vu le code, tu as compris l'idée.

    Par contre, ça donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [2006] => 50148.86604 [2007] => 53365.97448 [2008] => 55212.45496 [2009] => 49454.07376 [2010] => 42397.05184 [2011] => 31872.58672 [2012] => 26282.67408 [2013] => 22155.51728 [] => 83670.23444 )
    Normalement, ça va de 2006 à 2013. Je ne vois pas pourquoi il ajoute une autre entrée après 2013.
    Par contre, 2006 devrait donner 59696.55 et 2013 = 32952.06. Cela me permet de contrôler sur ces 2 années.

  5. #5
    Invité
    Invité(e)
    Par défaut
    En lisant d'autre posts, je ne comprends pas pourquoi ce code ne peut pas fonctionner :

    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
    // TOTAL GENERAL FIXE
    $query_total_general_fixe = $bdd->query('SELECT annee, COALESCE(SUM(abonnement),0) + COALESCE(SUM(consommation),0) + COALESCE(SUM(autres),0) - COALESCE(SUM(remise),0) as total_general_fixe FROM TEL_FIXE_ANALYSE GROUP BY annee');
    $query_total_general_mobile = $bdd->query('SELECT annee, COALESCE(SUM(abonnement),0) + COALESCE(SUM(consommation),0) + COALESCE(SUM(autres),0) - COALESCE(SUM(remise),0) as total_general_mobile FROM TEL_MOBILE_ANALYSE GROUP BY annee');
    while ($row_fixe = $query_total_general_fixe->fetch()) 
    {
        $total_general_fixe[] = $row_fixe['total_general_fixe'] * 1.196;
    }
    while ($row_mobile = $query_total_general_mobile->fetch())
    {
        $total_general_mobile[] = $row_mobile['total_general_mobile'] * 1.196;
    }
    $query_total_general_fixe->closeCursor();
    $query_total_general_mobile->closeCursor();
     
    $total_general = $total_general_fixe + $total_general_mobile;
    print_r($total_general);

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    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
    // TOTAL GENERAL FIXE
    $query_total_general_fixe = $bdd->query('SELECT annee, COALESCE(SUM(abonnement),0) + COALESCE(SUM(consommation),0) + COALESCE(SUM(autres),0) - COALESCE(SUM(remise),0) as total_general_fixe FROM TEL_FIXE_ANALYSE GROUP BY annee');
    $query_total_general_mobile = $bdd->query('SELECT annee, COALESCE(SUM(abonnement),0) + COALESCE(SUM(consommation),0) + COALESCE(SUM(autres),0) - COALESCE(SUM(remise),0) as total_general_mobile FROM TEL_MOBILE_ANALYSE GROUP BY annee');
    while ($row_fixe = $query_total_general_fixe->fetch()) 
    {
        $total_general[$row_fixe['annee']] = $row_fixe['total_general_fixe'] * 1.196;
    }
    while ($row_mobile = $query_total_general_mobile->fetch())
    {
    	if (isset($total_general[$row_fixe['annee']]))
    		$total_general[$row_mobile['annee']] += $row_mobile['total_general_mobile'] * 1.196;
    	else
    		$total_general[$row_mobile['annee']] = $row_mobile['total_general_mobile'] * 1.196;
    }
    $query_total_general_fixe->closeCursor();
    $query_total_general_mobile->closeCursor();

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Citation Envoyé par orygynz Voir le message
    En lisant d'autre posts, je ne comprends pas pourquoi ce code ne peut pas fonctionner :

    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
    // TOTAL GENERAL FIXE
    $query_total_general_fixe = $bdd->query('SELECT annee, COALESCE(SUM(abonnement),0) + COALESCE(SUM(consommation),0) + COALESCE(SUM(autres),0) - COALESCE(SUM(remise),0) as total_general_fixe FROM TEL_FIXE_ANALYSE GROUP BY annee');
    $query_total_general_mobile = $bdd->query('SELECT annee, COALESCE(SUM(abonnement),0) + COALESCE(SUM(consommation),0) + COALESCE(SUM(autres),0) - COALESCE(SUM(remise),0) as total_general_mobile FROM TEL_MOBILE_ANALYSE GROUP BY annee');
    while ($row_fixe = $query_total_general_fixe->fetch()) 
    {
        $total_general_fixe[] = $row_fixe['total_general_fixe'] * 1.196;
    }
    while ($row_mobile = $query_total_general_mobile->fetch())
    {
        $total_general_mobile[] = $row_mobile['total_general_mobile'] * 1.196;
    }
    $query_total_general_fixe->closeCursor();
    $query_total_general_mobile->closeCursor();
     
    $total_general = $total_general_fixe + $total_general_mobile;
    print_r($total_general);
    Ne marche pas parce que tu fait la somme de 2 array mais pas de 2 nombre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $total_general_fixe = 0;
    while ($row_fixe = $query_total_general_fixe->fetch()) 
    {
        $total_general_fixe += $row_fixe['total_general_fixe'] * 1.196;
    }
    $total_general_mobile = 0
    while ($row_mobile = $query_total_general_mobile->fetch())
    {
        $total_general_mobile += $row_mobile['total_general_mobile'] * 1.196;
    }
    Et si seulement tu veux avoir le total des années tu dois enlevé le group by annee de t'a requette et tu aura comme résultat la valeur que tu calcul $total_general_fixe ou $total_general_mobile

  8. #8
    Invité
    Invité(e)
    Par défaut
    Merci pour ces explications. Oui, je veux le total par année et non le total général donc je dois garder le GROUP BY.

    La 2ème solution ne fonctionne pas non plus. Par contre, je ne comprends même pas où il trouve ces nombres...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [2006] => 9547.69192 [2007] => 10269.07128 [2008] => 12557.23456 [2009] => 10301.01644 [2010] => 9968.959 [2011] => 10208.54172 [2012] => 10021.17636 [2013] => 10796.54316 )
    Pour info, le tableau FIXE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    annee 	total_general_fixe
    2006 	41930.49
    2007 	44620.38
    2008 	46164.26
    2009 	41349.56
    2010 	35449.04
    2011 	26649.32
    2012 	21975.48
    2013 	18524.68
    Et le MOBILE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    annee 	total_general_mobile
    2006 	7983.02
    2007 	8586.18
    2008 	10499.36
    2009 	8612.89
    2010 	8335.25
    2011 	8535.57
    2012 	8378.91
    2013 	9027.21

  9. #9
    Invité
    Invité(e)
    Par défaut
    Le problème peut être réglé directement en SQL :

    http://www.developpez.net/forums/d14...ontrainte-cle/

    Merci !

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

Discussions similaires

  1. Requêtes sql dans double while
    Par simonlaurent5000 dans le forum Langage SQL
    Réponses: 0
    Dernier message: 13/08/2011, 10h40
  2. Requête SQL et tableau
    Par juju1988 dans le forum Débuter
    Réponses: 4
    Dernier message: 06/04/2010, 08h29
  3. Requête SQL et tableau
    Par Jiraiya42 dans le forum MVC
    Réponses: 9
    Dernier message: 27/03/2009, 16h12
  4. Requête SQL et tableau à double entrée
    Par Invité dans le forum Langage SQL
    Réponses: 4
    Dernier message: 06/06/2007, 20h51

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