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 :

SUM sur requete sur plusieurs champs


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 22
    Par défaut SUM sur requete sur plusieurs champs
    Bonjour,
    J'ai un petit probleme,
    je fait une requete sql sur plusieurs champs de la table,
    je veux le SUM de l'un des champs;
    et bien sur, je le recupere apres le while suivant ma requete,
    evidement, je n'ai pas le SUM.

    comment dois je faire, pour avoir le SUM de l'un de mes champ, tout en récuperant les autres

    voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $req = mysql_query("SELECT ALL id,nom ,SUM(lenb) AS lesum,lenb FROM latable_tbl GROUP BY id")or die('Erreur de selection '.mysql_error());
    while ($letest = mysql_fetch_array($req))
     
    {
    $ladd = $letest['lesum'];
    $learray[] = $letest['nom'].'G'.$letest['lenb'];
    $lesnb[] = $letest['lenb'];
    }
    $ladd ne me donne pas la somme de ce champ, mais sa valeur a chaque boucle
    bien sur, je peux toujours faire un array_sum sur $lesnb;
    mais ce n'est pas comme ca que je le veux,
    je veux extraire le sum directement par sql, sans passer par une fonction php

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Août 2007
    Messages : 109
    Par défaut
    Normal.

    Tu fais ton group sur l'identifiant de ta table, qui est unique.

    Tu devrais :

    1 - enlever Id de ta clause select
    2 - Faire ton group by sur la colonne de regroupement Nom, ou autre chose.

    Pour l'instant la requete que tu fais s'exprime comme suit :

    Je veux la somme des quantite(Nb) pour chaque Identifiant.

    NB: il faut toujours limité le nombre de champ dans la sélection, car pour chaque champ dans la sélection tu entend le regroupement.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 22
    Par défaut
    Citation Envoyé par romulus1206 Voir le message
    Normal.

    Tu fais ton group sur l'identifiant de ta table, qui est unique.

    Tu devrais :

    1 - enlever Id de ta clause select
    2 - Faire ton group by sur la colonne de regroupement Nom, ou autre chose.

    Pour l'instant la requete que tu fais s'exprime comme suit :

    Je veux la somme des quantite(Nb) pour chaque Identifiant.

    NB: il faut toujours limité le nombre de champ dans la sélection, car pour chaque champ dans la sélection tu entend le regroupement.
    Merci a toi,
    je viens de suivre tes instructions,
    et ce n'est pas ce que je veux,
    j'avais group by id pour avoir tous ce que je voulais;
    en groupant par lenb ou par nom, je n'obtient pas tout.
    par contre, j'obtient la vrais somme de ce que ramasse ma requete, mais sous cette forme, elle ne me remene pas tout ce que je veux,
    c'est pour ca que je ramasse l'id aussi !
    est il possible de recuperer mon sum avant d'entrer dans la boucle while ?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Août 2007
    Messages : 109
    Par défaut
    Exprime la requête que tu veux faire.

    ex : Je veux sélectionner l'ensemble des quantités des gens portant le nom 'Jacques'

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 22
    Par défaut
    Citation Envoyé par romulus1206 Voir le message
    Exprime la requête que tu veux faire.

    ex : Je veux sélectionner l'ensemble des quantités des gens portant le nom 'Jacques'
    et bien je veux ca :
    je veux selectionner les champs nom, lenb, SUM(lenb) FROM matable

    et en récup,
    je veux
    $lenom[] = $var('nom')
    $lesnb[] $var('lenb')

    et la ou est mon probleme
    la somme de (lenb)

    mon probleme, c'est que je requete sur plusieurs champ, récup le SUM quand je requete qu'un champ, j'ai aucun pb

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Août 2007
    Messages : 109
    Par défaut
    c'est toujours pas trés clair

    Donc si j'ai compris , tu veux récupèrer la somme de tous les lenb de ta table ajouter à cette somme la sélection des nom et id

    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT id,nom, (SELECT SUM(lenb) FROM matable) as som FROM matable

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 22
    Par défaut
    Citation Envoyé par romulus1206 Voir le message
    c'est toujours pas trés clair

    Donc si j'ai compris , tu veux récupèrer la somme de tous les lenb de ta table ajouter à cette somme la sélection des nom et id

    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT id,nom, (SELECT SUM(lenb) FROM matable) as som FROM matable
    oui et non ^^
    en fait, le SUM aura un traitement independant,
    je veux seulement le recuperer,
    puis, recuperer aussi le nom et le nb, mais ca ca ne me pose pas de probleme
    j'essais ta requete,
    je te dis ce qu il en est !

    merci a toi en tous cas

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 22
    Par défaut --->romulus1206
    --->romulus1206

    Génial,
    pile poil ce que je voulais !!
    merci beaucoup de ton aide et ta patience !

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Août 2007
    Messages : 109
    Par défaut
    de rien,

    Au plaisir

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 22
    Par défaut
    Citation Envoyé par romulus1206 Voir le message
    de rien,

    Au plaisir
    enfin, tous ca m apprend que je ne peux pas requeter le meme champ avec le meme selecte, pourtant, j avais essayer avec un alias pour le suml, de facon a le differencier de mon select sur le meme champ

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 22
    Par défaut suite, mais avec jointure !
    c'est remoi !
    maintenant, je lutte pour obtenir la meme chose, mais apres une jointure,
    c'est a dire obtenir le sum de mon champ, mais uniquement apres avoir été filtré par une jointure !
    est ce possible ?
    j'ai éssayer differentes choses, chercher different tuto,
    pas trouver ce qui m'aide

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 22
    Par défaut
    Bon,
    j ai fait ca, et ca marche;
    est ce la meilleur/seule methode, ou il y a plus optimiser ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req = mysql_query("SELECT nom, table1_tbl.lenb, (SELECT SUM(table1_tbl.lenb) FROM table1_tbl INNER JOIN table2_tbl ON table1_tbl.nom = table2_tbl.mbr) as som FROM table1_tbl INNER JOIN table2_tbl ON table1_tbl.nom = table2_tbl.mbr")or die('Erreur de selection '.mysql_error());

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 22
    Par défaut
    désolé de upé; mais y a t'il une meilleur facon que mon code plus haut ?

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 43
    Par défaut
    bonjour,
    techniquement la requête fonctionne ... mais elle est loin d'être optimale.
    Si la table contient 1000 enregistrements au lieu de faire une requête on en fait 1001.
    En milieu professionnel c'est interdit.
    Il faudra en 2 deux.

    Pourquoi la première ne fonctionnait pas ? C'est la caractéristique de MySQL (et autres). MySQL est un sgbdR. R veut dire relationnel, ie que l'on manipule des relations (au sens mathématique). Plus simplement on manipule des rectangles. Or sum() renvoie une ligne et le select en renvoie plusieurs.

    Pour une exécution efficace il faut faire une requête sum à part, puis le select "principal" et dans l'affichage, afficher en plus des champs du select le résultat précédent de la la requête sum.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 22
    Par défaut
    Citation Envoyé par pascalbuguet Voir le message
    bonjour,
    techniquement la requête fonctionne ... mais elle est loin d'être optimale.
    Si la table contient 1000 enregistrements au lieu de faire une requête on en fait 1001.
    En milieu professionnel c'est interdit.
    Il faudra en 2 deux.

    Pourquoi la première ne fonctionnait pas ? C'est la caractéristique de MySQL (et autres). MySQL est un sgbdR. R veut dire relationnel, ie que l'on manipule des relations (au sens mathématique). Plus simplement on manipule des rectangles. Or sum() renvoie une ligne et le select en renvoie plusieurs.

    Pour une exécution efficace il faut faire une requête sum à part, puis le select "principal" et dans l'affichage, afficher en plus des champs du select le résultat précédent de la la requête sum.

    Donc, il vaut mieux 2 requetes,
    une pour mon sum filtrer par la jointure,
    puis une autre pour la récup de mes champs filtrés aussi par la jointure !
    si j ai bien compris

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 43
    Par défaut
    bonjour,
    exact
    bonne journée

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 22
    Par défaut
    meme chose pour des COUNT() ??
    mieux vaut 2 requetes distincte ?

Discussions similaires

  1. Réponses: 8
    Dernier message: 20/10/2014, 04h28
  2. Pb Count dans une requete avec plusieurs champ retournés
    Par maxos75 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 13/06/2008, 14h01
  3. requete sur le type de champs possible ?
    Par Hydex dans le forum VBA Access
    Réponses: 1
    Dernier message: 31/05/2007, 16h52
  4. Export requete sur excel sur plusieur onglets
    Par Renardo dans le forum Access
    Réponses: 10
    Dernier message: 26/01/2007, 17h13
  5. [MySQL] Requete sur 2 tables avec champs commun
    Par marcd dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 20/04/2006, 16h14

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