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 :

Probleme avec Select SUM()


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Probleme avec Select SUM()
    Bonjour a vous,

    J'aurai besoin de votre aide une fois de plus
    Voici un petit bout de ma table sql :
    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
     
    CREATE TABLE `mj_commande` (
      `commande_id` int(3) NOT NULL auto_increment,
      `id_endroit` int(3) NOT NULL,
      `com_endroit` text,
      `commande_date` date NOT NULL,
      `command_noclient` varchar(10) NOT NULL,
      `code_202` int(5) default NULL,
      `code_204` int(5) default NULL,
      `code_313` int(5) default NULL,
      `code_301` int(5) default NULL,
      `code_302` int(5) default NULL,
      `code_314` int(5) default NULL,
      `code_331` int(5) default NULL,
      `code_332` int(5) default NULL,
      `code_401` int(5) default NULL,
      `code_403` int(5) default NULL,
      `code_602` int(5) default NULL,
      `code_1001` int(5) default NULL,
      `code_1003` int(5) default NULL,
      `code_1002` int(5) default NULL,
      `code_1004` int(5) default NULL,
      `code_322` int(5) default NULL,
      `code_321` int(5) default NULL,
      `code_0000` int(5) default NULL,
    Sur une autre page php voici la requete sql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mysql_select_db($database_SQLLCMR, $SQLLCMR);
    $query_Recordset1 = "SELECT * FROM mj_commande WHERE mj_commande.id_endroit = '$who' AND mj_commande.commande_date BETWEEN '$dated' AND '$datef'";
    $Recordset1 = mysql_query($query_Recordset1, $SQLLCMR) or die(mysql_error());
    Aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $query = "SELECT SUM(code_202) FROM mj_commande WHERE mj_commande.id_endroit = '$who' AND mj_commande.commande_date BETWEEN '$dated' AND '$datef'";
    $result3 = mysql_query($query) or die(mysql_error());
    while($row2 = mysql_fetch_array($result3)){
    echo $row2['SUM(code_202)'];
    }
    Mon probleme est que j'ai besoin de tous les somme dans la table code_202, code_204, code_313 j'imagine qu'il doit avoir un autre moyen que de crée 18 requete pour avoir la somme des differant champs

    Un gros merci a vous

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Rien ne t'empêche de mettre plusieurs SUM dans le SELECT.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT SUM(code_202) AS somme_code_202,
      SUM(code_204) AS somme_code_204
    -- etc.
    FROM mj_commande
    WHERE mj_commande.id_endroit = '$who' 
      AND mj_commande.commande_date BETWEEN '$dated' AND '$datef'"

    Ceci dit, j'ai l'impression qu'il y a une erreur de modélisation. C'est quoi ces "code_N" ?
    Ont-ils tous une valeur pour chaque ligne de la table ?

    Et pourquoi avoir à la fois "id_endroit" et "endroit" ?
    N'y a t-il pas redondance d'information avec la table des endroits ?

    Un noclient en VARCHAR, c'est pas top !

    Enfin, dans ta première requête, évite la guerre des étoiles !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci sa fonctionne

    et pour repondre au questions :
    Ceci dit, j'ai l'impression qu'il y a une erreur de modélisation. C'est quoi ces "code_N" ?
    Ont-ils tous une valeur pour chaque ligne de la table ?
    Oui il a des nombres dans chanque champs qui est une quantitée d'item commandé.

    Et pourquoi avoir à la fois "id_endroit" et "endroit" ?
    N'y a t-il pas redondance d'information avec la table des endroits ?
    Je me sert de INNER JOIN sur une autre table

    Un noclient en VARCHAR, c'est pas top !
    c'est une valeur texte et numero un Purchase Order

    Enfin, dans ta première requête, évite la guerre des étoiles !
    Ouin je me sens dans un monde de paresse presentement lol

    Merci pour ton aide grandement apprecié

  4. #4
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    salut ; je join cinephil , vous avez un problème de modélisation , normalement vous devez passer par un-plusieurs et comme une simple requête avec sum....et...... groupby suffira.
    vous risquer d'avoir des puits a creuser plus tard !!!!

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    J'ai fait le changement et tout fonctionne a merveille

    cela dit je recontre un autre probleme et la beaucoup plus loin que mon niveau de php.

    Voici la table SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      `CalcID` int(5) NOT NULL auto_increment,
      `Calc1A` time default NULL,
      `Calc1D` time default NULL,
      `Calc2A` time default NULL,
      `Calc2D` time default NULL,
      `Calc3A` time default NULL,
      `Calc3D` time default NULL,
      `Calc4A` time default NULL,
      `Calc4D` time default NULL,
    bon j'essai de faire un petit calcul d'un taux horraire
    dans excel la formule est simple
    Heure d'arriver dans la case A1 = 1:00
    Heure de depart dans la case B1 = 2:30
    B1 - A1 = 1:30

    donc en php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $query_Recordset1 = "SELECT Calc1A,Calc1D FROM Calc WHERE CalcID = 1";
    $cal11 = $row_Recordset1['Calc1D'] - $row_Recordset1['Calc1A'];
    echo $cal11
    la reponse est 1 et non 1:30
    une idée ?

  6. #6
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    normal tu as un problème de typage...

    la date mysql est transformée en une chaine de caractère quand tu fais ton select donc tu obtiens l'écart entre les 2 premiers élément des 2 chaines... tu as du bol qu'il ne t'envoie pas juste une belle erreur... ahh les joies du transtypage implicite...



    faut faire le calcul dans le select avec les fonctions dédiées genre timediff()

    faut te mettre dans la tête que l'interprétation des données entre mysql qui est fortement typé et php qui l'est très faiblement fait que c'est pas parce que tu auras un type en mysql qu'il sera identique une fois en php
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

Discussions similaires

  1. probleme avec SELECT..FROM..WHERE
    Par VBBBA dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 08/09/2006, 15h58
  2. [EJB3][HIBERNATE] Probleme avec select max
    Par kristof_machin dans le forum Hibernate
    Réponses: 2
    Dernier message: 26/04/2006, 13h05
  3. [VB]probleme avec select case
    Par mickael99 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 03/02/2006, 14h07
  4. Probleme avec select
    Par sorry60 dans le forum Réseau
    Réponses: 20
    Dernier message: 16/12/2005, 17h23
  5. Probleme avec Select Case
    Par GeffD dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 07/03/2005, 15h28

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