moyenne de durée/ date

Eléphanteau du PHP | 10 Messages

24 juin 2005, 09:44

bonjour tlm,
j'ai une table dont le schéma est le suivant :

Code : Tout sélectionner

CREATE TABLE `connexion` ( `idcab` varchar(20) NOT NULL default '', `datedebut` date NOT NULL default '0000-00-00', `heuredebut` time NOT NULL default '00:00:00', `heurefin` time default NULL, PRIMARY KEY (`idcab`,`datedebut`,`heuredebut`) )
ca représente des connexion/deconnexion au site.
J'aimerais faire une moyenne des durée :
j'arrive a faire :
SELECT idcab, timediff(heurefin,heuredebut) FROM connexion
qui me renvoie la durée d'une connexion

mais ce que je voudrais faire c'est quelque chose comme :
SELECT idcab, avg(timediff(heurefin,heuredebut)) FROM connexion group by idcab
mais avg n'a pas l'air de marcher sur les dates.

Mais comment faire! (je suis pret a revoir totalement ma table et ses champs si vous pensez que ce n'est pas le plus judicieux)

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

24 juin 2005, 10:03

effectivement c'est possible que tu ne puisses pas faire une moyenne directement sur une date

une solution pourrait être de transformer en entier (timestamp), faire ta moyenne avec AVG() puis reformater ensuite

je vois ça par exemple :
UNIX_TIMESTAMP()
Si UNIX_TIMESTAMP() est appelé avec un argument date , elle retourne le timestamp correspondant à cette date

ça pourrait peut-être faire ce que tu veux

tu sélectionnes les deux timestamp, tu fais la différence, puis la moyenne de ces différences puis tu reformates

ce n'est qu'une idée à creuser éventuellement, c'est peut-être un peu tordu :)

Eléphanteau du PHP | 10 Messages

24 juin 2005, 11:02

merci c'est pas exactement ca mais ca m'a bien mis sur la voie.

donc avec le meme schéma que ci dessus, pour faire une moyenne des durée de connexion on peut faire :

Code : Tout sélectionner

select idcab, avg(time_to_sec(timediff(heurefin,heuredeb))) from connexion group by idcab
ca renvoir la moyenne en seconde donc il faut voir à reformatter la chose.

je sais pas si c tordu mais à priori ca marche

(au passge on peut peu etre rajouter un where heurefin is not null mais a priori ca change pas le résultat des test

thx ouckileou

ViPHP
pjl
ViPHP | 2119 Messages

24 juin 2005, 12:02

[RESOLU] alors ?

Eléphanteau du PHP | 10 Messages

24 juin 2005, 12:29

Voila c ma solution final :

select idcab, sec_to_time(avg(time_to_sec(timediff(heurefin,heuredeb)))) from connexion2 group by idcab

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

24 juin 2005, 12:30

Pense à cliquez sur le bouton [RESOLU] qui se trouve en haut à gauche au dessus des topics

merci
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer