Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels 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 23/04/2011, 14h00   #1
Invité de passage
 
Homme
Math Sup
Inscription : avril 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Math Sup

Informations forums :
Inscription : avril 2011
Messages : 2
Points : 0
Points : 0
Par défaut Somme d'un "Time" dans une autre table

Bonjour à tous,

N'étant pas très très à l'aise avec MySQL, j'aurais besoin d'aide pour réaliser un petit truc... je ne sais même pas si c'est réalisable, mais bon, qui ne tente rien n'a rien...

Je vais tenter de vous présenter au mieux le "soucis" et ce que je souhaiterais faire.

Je dispose dans une table MySQL (de 18 champs) un champ "duration" au format TIME. Actuellement, j'ai dans cette table plus de 4000 entrées.

Je souhaiterais faire la chose suivante. Dans cette table, chaque entrée est reliée à un membre de mon site par un numéro de membre (qui est donc un autre champ de la table). Je souhaiterais que dans une autre table, un champ "total" (par exemple) fasse la somme de tous les champs "duration" pour chacun de mes membres (au nombre de 55 pour l'instant).

En bref, je souhaiterais créer une nouvelle table avec seulement 2 champs : un champ pour le numéro de membre, et un autre champ qui va faire la somme du champ "duration" pour ce membre là.

Est-ce réalisable ? Si oui, comment ?

Merci par avance pour votre aide de pro !
VTA001 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2011, 21h02   #2
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 843
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
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 : 843
Points : 1 318
Points : 1 318
Salut
Le plus simple est de faire une procédure stockée avec un curseur qui insérera ou mettra à jour

Code sql :
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
26
27
USE bidule;
DROP procedure IF EXISTS maj_total;
delimiter |
CREATE procedure maj_total()
begin
	declare i,tot, int(4);
	declare done,present bool DEFAULT false;
	declare lit cursor FOR SELECT id FROM members;
	declare CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
	open lit;
	repeat
		fetch lit INTO i;
		IF NOT done then
			SELECT count(id)>0 INTO present FROM totaux;
			SELECT sum(val) INTO tot FROM resultats WHERE idmembre=i;
			IF present then
				UPDATE totaux SET total=tot WHERE idmembre=i;
			else
				INSERT INTO totaux(idmembre,total)VALUES(i,tot);
			end IF;
		end IF;
	until done end repeat;
	close lit;
end|
delimiter ;
 
call maj_total;
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 14h00   #3
Invité de passage
 
Homme
Math Sup
Inscription : avril 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Math Sup

Informations forums :
Inscription : avril 2011
Messages : 2
Points : 0
Points : 0
Bonjour,

Merci infiniment pour votre réponse.
Cependant, je ne sais pas trop comment et où utiliser ce code. Pourrais-je avoir un petit peu plus d'explications ?

Merci encore pour votre aide.
VTA001 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 15h00   #4
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 843
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
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 : 843
Points : 1 318
Points : 1 318
Salut,

la procédure mettra à jour tes résultat quand tu l'appelleras avec call... soit dans la console mysql, soit en cron mysql soit dans un script php par exemple...

si le total pour le membre n'a jamais été calculé, on insère une nouvelle entrée sinon on met juste à jour le résultat

ps j'ai corrigé un espace oublié ligne 8 devant le from.
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h13.


 
 
 
 
Partenaires

Hébergement Web