Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/11/2010, 10h00   #1
Invité de passage
 
paul krawezyk
Inscription : octobre 2010
Messages : 7
Détails du profil
Informations personnelles :
Nom : paul krawezyk

Informations forums :
Inscription : octobre 2010
Messages : 7
Points : 0
Points : 0
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 :
$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 !
phapha89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 11h20   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
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 :
1
2
3
SELECT numsemaine, SUM(nombreheure)  FROM nounou2
WHERE dbmois='$choixmois'  AND dbannee=$choixannee 
GROUP BY numsemaine
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 11h33   #3
Invité de passage
 
paul krawezyk
Inscription : octobre 2010
Messages : 7
Détails du profil
Informations personnelles :
Nom : paul krawezyk

Informations forums :
Inscription : octobre 2010
Messages : 7
Points : 0
Points : 0
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 :
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 !!!
phapha89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 11h43   #4
Membre chevronné
 
Inscription : juillet 2003
Messages : 625
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 625
Points : 600
Points : 600
Bonjour,

Code :
$sql = "SELECT numsemaine, SUM(dbgarde) AS sommedbgarde FROM nounou2 WHERE (dbmois='$choixmois' AND dbannee='$choixannee') AND SUM(dbgarde) > 36 GROUP BY numsemaine";
devrait fonctionner.
__________________
Le savoir est utile que s'il est partagé par tous.
/(bb|[^b]{2})/
!sleep() ? array((string))
syl2095 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 18h04   #5
Invité de passage
 
paul krawezyk
Inscription : octobre 2010
Messages : 7
Détails du profil
Informations personnelles :
Nom : paul krawezyk

Informations forums :
Inscription : octobre 2010
Messages : 7
Points : 0
Points : 0
Salut, non çà ne fonctionne pas !
phapha89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 18h32   #6
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 656
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : avril 2007
Messages : 3 656
Points : 5 359
Points : 5 359
"ç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 :
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)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 19h41   #7
Invité de passage
 
paul krawezyk
Inscription : octobre 2010
Messages : 7
Détails du profil
Informations personnelles :
Nom : paul krawezyk

Informations forums :
Inscription : octobre 2010
Messages : 7
Points : 0
Points : 0
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 ?
phapha89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 19h47   #8
Membre actif
 
Tobbi Filteau
Inscription : mai 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Tobbi Filteau

Informations forums :
Inscription : mai 2010
Messages : 176
Points : 177
Points : 177
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.
osuwariboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 20h29   #9
Membre chevronné
 
Inscription : juillet 2003
Messages : 625
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 625
Points : 600
Points : 600
oui désolé c'était having
__________________
Le savoir est utile que s'il est partagé par tous.
/(bb|[^b]{2})/
!sleep() ? array((string))
syl2095 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 21h43   #10
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
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.
Citation:
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é
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 21h47   #11
Membre actif
 
Tobbi Filteau
Inscription : mai 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Tobbi Filteau

Informations forums :
Inscription : mai 2010
Messages : 176
Points : 177
Points : 177
j'ai écrit après? Je voulais dire avant, bien sûr
osuwariboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 21h49   #12
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
vi vi tu as écris ca et j'ai cité pour pas que tu édites après
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 21h54   #13
Membre actif
 
Tobbi Filteau
Inscription : mai 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Tobbi Filteau

Informations forums :
Inscription : mai 2010
Messages : 176
Points : 177
Points : 177
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
osuwariboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 03h34   #14
Invité de passage
 
paul krawezyk
Inscription : octobre 2010
Messages : 7
Détails du profil
Informations personnelles :
Nom : paul krawezyk

Informations forums :
Inscription : octobre 2010
Messages : 7
Points : 0
Points : 0
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 :
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 :
1
2
3
4
5
6
while ($result = mysql_fetch_assoc($req))
{
	
    $nbheurecomp +=  $result[sommedbgarde]-36;
	
}
phapha89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h44.


 
 
 
 
Partenaires

Hébergement Web