Soustraction dans requête mysql

Eléphant du PHP | 229 Messages

05 oct. 2012, 08:36

Ce sujet aurait plus sa place en SQL

Eléphanteau du PHP | 34 Messages

05 oct. 2012, 11:27

Encore merci à tous les deux,

Je vais regarder ton exemple ce soir schim59. Sinon oui, tu as bien compris Mazarini, c'est vrai que c'est logique pour moi mais pas facile a expliquer :?

Merci

ViPHP
ViPHP | 2577 Messages

05 oct. 2012, 11:41

Si j'ai bien compris alors la solution est dans l'utilisation d'une vue pour avoir les cumuls par demande.

A la base tu as une "table" (en fait résultat d'une jointure sans cumul/moyenne):
demande1,intervention1_1,temps1_1
demande1,intervention1_2,temps1_2
demande2,intervention2_1,temps2_1
Il est impossible de cumuler les ligne 1 et 2 et de faire une moyenne avec la ligne 3

Par contre tu peux faire une vue (CREATE VIEW DEMANDE_CUMULEE AS SELECT SUM()... GROUP BY DEMANDE) qui te fourni la même table que ci-dessus, mais avec des cumuls par demande.

Tu peux alors faire les moyenne avec la vue comme table.

(regardes la syntaxe exacte pour la création de vue, c'est simple mais je n'en fait pas tout les jours)

Eléphanteau du PHP | 34 Messages

05 oct. 2012, 20:26

Merci je connaissais pas les vues, si c'est comme les jointures ça commence à bien rentrer à force :)

J'ai trouvé ça on verra bien: http://www.apprendre-php.com/tutoriels/ ... -vues.html

Eléphanteau du PHP | 34 Messages

05 oct. 2012, 21:48

En suivant le tuto et en réfléchissant un peu j'ai fait ceci pour le moment:
$reqcorrectif = mysql_query("CREATE VIEW nbreheure AS SELECT date_appel, d.id, idCorrectif, intervention_id, TIMESTAMPDIFF(SECOND,debut_inter,fin_inter) AS travail, TIME_TO_SEC(tps_acces_signature) AS acces
	FROM correctif AS c LEFT JOIN demande AS d ON c.id_appel = d.id LEFT JOIN work_times AS w ON intervention_id=c.id_appel
	WHERE MONTH(date_appel)=$mois AND YEAR(date_appel)=$annee AND debut_inter IS NOT NULL AND fin_inter IS NOT NULL AND type_inter = 'Correctif' AND statut='Cloturé'");
$correctif = mysql_query("SELECT AVG (travail-acces) AS moyenne FROM nbreheure");
Mais pour le moment j'ai un résultat de 1,5 heures alors qu'avec 6+3+1 je devrais avoir une moyenne (arrondi de 3 heures) donc je recherche toujours....

Eléphanteau du PHP | 34 Messages

05 oct. 2012, 22:29

Bon ça m'a pris au moins 10000 neurones tellement le cerveau à chauffé lol mais je pense que c'est bon, j'obtiens bien mes 3 heures:
$supp = mysql_query("DROP VIEW  nbreheure");
$reqcorrectif = mysql_query("CREATE VIEW nbreheure AS SELECT date_appel, d.id, idCorrectif, intervention_id, SUM(TIMESTAMPDIFF(SECOND,debut_inter,fin_inter)) AS travail, SUM(TIME_TO_SEC(tps_acces_signature)) AS acces
	FROM correctif AS c LEFT JOIN demande AS d ON c.id_appel = d.id LEFT JOIN work_times AS w ON intervention_id=c.id_appel
	WHERE MONTH(date_appel)=$mois AND YEAR(date_appel)=$annee AND debut_inter IS NOT NULL AND fin_inter IS NOT NULL AND type_inter = 'Correctif' AND statut='Cloturé' GROUP BY idCorrectif");
$correctif = mysql_query("SELECT idCorrectif,travail, acces,AVG (travail-acces) AS moyenne FROM nbreheure");
Qu'est ce que vous en pensez?