[MySQL] gemiddelde tijd?

Pagina: 1
Acties:
  • 434 views sinds 30-01-2008
  • Reageer

  • TheBlasphemer
  • Registratie: September 2004
  • Laatst online: 13-11 13:20
Ik heb al tijden in mijn programma een auto-update feature, echter bestaat het bestand waar die naar zoekt ook al tijden niet ;)
Nu heb ik een week geleden voor de grap eens een PHP scriptje neergeplempt die voor mij opslaat uit welk land de hit kwam, van welk IP (om te zorgen dat multiple hits niet dubbel geteld worden), en wanneer de eerste en laatste hit was.
Mn Database ziet er zo uit:
quote: SQLyog
CREATE TABLE `sp_UpdateStats` (
`IP` int(10) unsigned NOT NULL default '0',
`LastHit` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`FirstHit` timestamp NULL default '0000-00-00 00:00:00',
`CountryIndex` tinyint(3) unsigned default '0',
PRIMARY KEY (`IP`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
En ik update met deze query:
mysql_query("INSERT INTO sp_UpdateStats VALUES(inet_aton('".addslashes($_SERVER['REMOTE_ADDR'])."'),NOW(),NOW(),".$ci.") ON DUPLICATE KEY UPDATE LastHit=NOW(), CountryIndex=".$ci.";");
Dit geeft me een goed idee van hoeveel mensen mijn programma gebruiken, en uit welk land ze komen (Frankrijk en Brazilie, apparently :S):
SELECT COUNT(s.IP) as Num, c.cn AS Country FROM sp_UpdateStats s, geoip_cc c WHERE s.CountryIndex=c.ci GROUP BY s.CountryIndex ORDER BY Num DESC;
Echter, nu leek het me ook leuk om eens te kijken rond welke tijd mensen gemiddeld mijn programma opstarten :)
Dus ik een AVG( TIME(LastHit) ) erachter kwakken, komen er getallen uit als 9.9354388843314 :S
Niet echt wat ik in gedachten had... MIN en MAX werken overigens wel gewoon zoals ik verwacht...
Ik heb daarna TIME_TO_SEC droverheen gegooid, en daar kwam wel iets uit, maar MySQL heeft niets om daar weer een tijd van te maken :S

Weet iemand misschien hoe ik dit wel goed op kan vragen?

[img=http://www.web2messenger.com/smallstatus/w2m/theblasp.png]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 07:54

Janoz

Moderator Devschuur®

!litemod

Tja, het getal dat je terug krijgt lijkt mij gewoon de tijd in dagen. Je kunt dat heel makkelijk terug rekenen naar een tijdstip. Voor de uren deel je door 24, voor de minuten deel je de rest door 60 enz enz..

Te snel gekeken... dacht dat het 0.9 was |:(

Maar goed. Je kunt altijd nog een klein test databasje maken met enkele tijden erin waarvan je het gemiddelde weet en kijken wat er uit komt. Op die manier is denk ik wat makkelijker te achterhalen wat het nu eigenlijk voorstelt.

[ Voor 40% gewijzigd door Janoz op 22-04-2007 12:30 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • TheBlasphemer
  • Registratie: September 2004
  • Laatst online: 13-11 13:20
Als ik zo kijk kan het niet de tijd in dagen zijn. Als ik TIME doe, zou hij alleen de tijd moeten pakken (dus 0:00 tot 23:59), en zou het dus in theorie tussen de 0 en 1 dag zijn. Dan zou er met AVG dus nooit een waarde van 9.iets uit kunnen komen :/ Overigens liggen alle waardes, van alle landen, in de buurt van die 9. waarde, en het principe van de tijdzones zou dat tegen spreken...

[img=http://www.web2messenger.com/smallstatus/w2m/theblasp.png]


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 01-12 20:19

Gerco

Professional Newbie

Wat je zoekt is waarschijnlijk UNIX_TIMESTAMP():
code:
1
SELECT UNIX_TIMESTAMP(veld) FROM tabel WHERE voorwaarde


Dan kun je met de gewone PHP functies als strftime de tijd formatteren.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • OnTracK
  • Registratie: Oktober 2002
  • Laatst online: 01-12 20:10
how about:
SQL:
1
SEC_TO_TIME(AVG(TIME_TO_SEC(TIME(LastHit))))
TheBlasphemer schreef op zaterdag 21 april 2007 @ 17:21:

Ik heb daarna TIME_TO_SEC droverheen gegooid, en daar kwam wel iets uit, maar MySQL heeft niets om daar weer een tijd van te maken :S
Volgens de Reference Manual dus wel? zie hier

edit:
In het stukje over AVG staat mijn voorbeeld bijna letterlijk :P
The SUM() and AVG() aggregate functions do not work with temporal values. (They convert the values to numbers, losing everything after the first non-numeric character.) To work around this problem, you can convert to numeric units, perform the aggregate operation, and convert back to a temporal value. Examples:
SQL:
1
2
SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROM tbl_name;
SELECT FROM_DAYS(SUM(TO_DAYS(date_col))) FROM tbl_name;

[ Voor 117% gewijzigd door OnTracK op 23-04-2007 02:24 ]

Not everybody wins, and certainly not everybody wins all the time.
But once you get into your boat, push off and tie into your shoes.
Then you have indeed won far more than those who have never tried.


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 25-11 22:57

dusty

Celebrate Life!

Wat dacht je van een count() en een Hour() te gebruiken in je query om te zien hoevaak je programma in een bepaald uur wordt opgestart, krijg je 24 waarden als je dat plot heb je ook meteen een mooi grafiekje.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR

Pagina: 1