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 :

calculs sur requete [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 21
    Par défaut calculs sur requete
    Bonjour, je vais essayé de faire simple :
    J'ai une BD qui contient les champs suivant (en gros!!!):

    id nombreheure dbmois dbannee numerosemaine

    1 9 Novembre 2010 44
    2 8 Novembre 2010 44
    3 9 Novembre 2010 45

    Je fais une requete pour obtenir les numéro de semaine qui concernent le mois de novembre ET l'année 2010 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT DISTINCT numsemaine FROM nounou2 WHERE (dbmois='$choixmois' && dbannee='$choixannee')";
    Comment faire pour calculer la somme d'heure par numéro de semaine ???

    Merci d'avance pour votre aide !

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    C'est monstrueux d'avoir des mois en toute lettres dans une base de données

    Sinon pour ta somme, il faut utiliser .... SUM
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT numsemaine, SUM(nombreheure)  FROM nounou2
    WHERE dbmois='$choixmois'  AND dbannee=$choixannee 
    GROUP BY numsemaine
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 21
    Par défaut
    Génial merci çà fait des heures que je galère !!!

    Mais encore une question, voilà ma requete et l'affichage de mes résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql = "SELECT numsemaine, SUM(dbgarde) AS sommedbgarde FROM nounou2 WHERE (dbmois='$choixmois' AND dbannee='$choixannee')GROUP BY numsemaine"; 
      $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    while ($result = mysql_fetch_array($req))
    {
     
        $tabsemaine =  $result[numsemaine].' '.$result[sommedbgarde];
     
         echo $tabsemaine;
    En fait je souhaite calculer le nombre d'heure par numéro de semaine, qui dépasse 36.

    Est ce que je dois intégrer le calcul dans la requête ou bien le calculer après récupération des résultats ???

    En tout cas merci encore !!!

  4. #4
    Membre émérite
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT numsemaine, SUM(dbgarde) AS sommedbgarde FROM nounou2 WHERE (dbmois='$choixmois' AND dbannee='$choixannee') AND SUM(dbgarde) > 36 GROUP BY numsemaine";
    devrait fonctionner.

  5. #5
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 21
    Par défaut
    Salut, non çà ne fonctionne pas !

  6. #6
    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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    "ça ne fonctionne pas" n'est pas un message d'erreur valide. En règle générale, soit il ne se passe rien, soit tu te manges un superbe message d'erreur. (dans de très rares cas, l'ordi explose et/ou tente d'apprendre à voler à travers une fenêtre...)
    Donc, donner un chouia plus de précisions serait une bonne idée.

    Bon en l'occurrence, il me semble qu'on ne peut pas faire un where sur une somme, il faut utiliser Having.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT numsemaine, SUM(dbgarde) AS sommedbgarde 
    FROM nounou2 
    WHERE (dbmois='$choixmois' AND dbannee='$choixannee') 
    GROUP BY numsemaine
    HAVING SUM(dbgarde) > 36
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 21
    Par défaut
    Salut, je sais que je n'es pas été très explicite mais j'étais speed, désolé, c'est pas le genre de la maison.

    Je connais pas HAVING, cà veut dire quoi ?

  8. #8
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    La clause HAVING d'une requête SQL est l'équivalent de la clause WHERE, seulement elle s'applique sur le résultat d'une fonction de regroupement comme SUM, COUNT, etc

    Elle se place toujours à la fin, après la clause ORDER BY s'il y en a une. Autrement dit, si tu veux une requête qui te retourne toutes les sommes supérieures à 50, tu peux faire:

    SELECT SUM(champ) from table
    having SUM(champ) > 50

    La clause WHERE ne peut pas marcher ici parce que c'est sur le résultat de SUM que l'on désire appliquer la condition. Le WHERE ne s'applique que sur la valeur d'un champ.

  9. #9
    Membre émérite
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Par défaut
    oui désolé c'était having

  10. #10
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Citation Envoyé par osuwariboy Voir le message
    Elle se place toujours à la fin, après la clause ORDER BY s'il y en a une.
    SELECT [STRAIGHT_JOIN]
    [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
    [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] [HIGH_PRIORITY]
    [DISTINCT | DISTINCTROW | ALL]
    select_expression,...
    [INTO {OUTFILE | DUMPFILE} 'nom_fichier' export_options]
    [FROM table_references
    [WHERE where_definition]
    [GROUP BY {unsigned_integer | nom_de_colonne | formula} [ASC | DESC], ...
    [HAVING where_definition]
    [ORDER BY {unsigned_integer | nom_de_colonne | formula} [ASC | DESC] ,...]
    [LIMIT [offset,] lignes]
    [PROCEDURE procedure_name(argument_list)]
    [FOR UPDATE | LOCK IN SHARE MODE]]
    Petite rectification, elle se place avant l'éventuel ORDER BY qui de son coté ordonne le groupement et non pas le jeu de lignes qui sera groupé

  11. #11
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    j'ai écrit après? Je voulais dire avant, bien sûr

  12. #12
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    vi vi tu as écris ca et j'ai cité pour pas que tu édites après

  13. #13
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    Bon ben coudonc... va falloir que j'endure cette tache indélébile à mon dossier

    Et merci d'avoir pointé mon erreur, personne n'est parfait après tout

  14. #14
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 21
    Par défaut
    Tout d'abord merci pour votre aide !

    Donc cette requête me retourne bien tous les numéro de semaine et le nombre d'heure dont la somme est supérieur à 36:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql = "SELECT numsemaine, SUM(dbgarde) AS sommedbgarde 
    FROM nounou2 
    WHERE (dbmois='$choixmois' AND dbannee='$choixannee') 
    GROUP BY numsemaine
    HAVING SUM(dbgarde) > 36";
    Maintenant, ce qu'il faut que j'arrive à faire, c'est calculer pour un mois donné, le nombre d'heures total qui dépasse 36 !
    En gros, si j'ai Semaine 44 = 37 heures et Semaine 45 = 38 heures, je cherche nombreheuresup = 3 heures

    Merci d'avance !

    J'ai trouvé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while ($result = mysql_fetch_assoc($req))
    {
    	
        $nbheurecomp +=  $result[sommedbgarde]-36;
    	
    }

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

Discussions similaires

  1. [AC-2007] Calcul sur requete
    Par Aladin_23 dans le forum VBA Access
    Réponses: 6
    Dernier message: 27/03/2010, 09h59
  2. [AC-2003] champs calcules sur requete
    Par rastaspilo dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 22/03/2010, 18h46
  3. Detail calcul sur resultat d'une requete
    Par lelapinrusse dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 05/01/2008, 23h13
  4. Calcul de moyenne et ecarttype sur requete!
    Par Vascogil dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 26/06/2007, 16h25
  5. Calcul sur requete
    Par nicoolas dans le forum Access
    Réponses: 3
    Dernier message: 11/01/2005, 16h50

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