[PHP/MySQL] avg tijdsverschil

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BARO
  • Registratie: Mei 2003
  • Laatst online: 05-08 19:47
Ik heb twee rijen in mijn database: begin_datum_tijd & eind_datum_tijd die als volgt in de database zijn opgeslagen: Y-m-d H:i:s .

Ik wil het gemiddelde verschil tussen de gemiddelde begintijd en de gemiddelde eindtijd hebben.

Dus bijvoorbeeld:
code:
1
2
3
begin_datum_tijd           eind_datum_tijd
2005-03-08 17:20:00     2005-03-08 17:22:00
2005-02-07 12:10:00     2005-02-07 12:14:00

Het gemiddelde verschil tussen de gemiddelde begjntijd en de gemiddelde eindtijd is dan 3 minuten ( 17:20:00 - 17:22:00 = 2 mins; 12:10:00 - 12:14:00 = 4 minuten; ((2+4)/2)=3 ).

Hoe kan ik dit het beste aanpakken?

Bvd

Acties:
  • 0 Henk 'm!

  • HyperioN
  • Registratie: April 2003
  • Laatst online: 24-05 15:42
Omzetten naar timestamps, eindtijden optellen, begintijden optellen, totalen van elkaar aftrekken, delen door het aantal records, aantal ms omzetten in gewenste eenheid (seconden, minuten...etc.)

het is sowieso misschien beter en handiger om je datum/tijd op te slaan als timestamps in je db, dan kun je gewoon select avg doen.

[ Voor 6% gewijzigd door HyperioN op 08-03-2005 19:00 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

code:
1
SELECT AVG(eind_datum_tijd - begin_datum_tijd) FROM tabel

:?
HyperioN. schreef op dinsdag 08 maart 2005 @ 18:58:
het is sowieso misschien beter en handiger om je datum/tijd op te slaan als timestamps in je db
In MySQL moet je dan wel oppassen dat je een datetime veld pakt, en niet een veld van het type timestamp. Dat wordt namelijk automatisch ingesteld op de datum/tijd van de laatste wijziging van het record. Bovendien kan er voor zover ik weet maar één timestamp veld per tabel voorkomen.

Overigens, als dat echt strings zijn die je in je database hebt gezet, dan ben je niet al te handig bezig, zoals hier boven me al gezegd wordt. Je kan dan alleen in PHP je gemiddelde uitrekenen door eerst je veld om te rekenen naar een echt timestamp, en daarna daarmee te gaan rekenen in een lusje. Laat dat liever aan SQL over, en pak een datumtijd-veld. :)

[ Voor 87% gewijzigd door NMe op 08-03-2005 19:02 ]

'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.


Acties:
  • 0 Henk 'm!

  • HyperioN
  • Registratie: April 2003
  • Laatst online: 24-05 15:42
-NMe- schreef op dinsdag 08 maart 2005 @ 18:58:
code:
1
SELECT AVG(eind_datum_tijd - begin_datum_tijd) FROM tabel

:?
Dat kan toch niet als varchar oid opslaat?

Acties:
  • 0 Henk 'm!

  • BARO
  • Registratie: Mei 2003
  • Laatst online: 05-08 19:47
Is uiteraard gewoon opgeslagen als DATETIME.

Zal ik alsnog de data en tijden opslaan (en dus omzetten) naar timestamps, of voldoet DATETIME?

[ Voor 53% gewijzigd door BARO op 08-03-2005 19:05 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

HyperioN. schreef op dinsdag 08 maart 2005 @ 19:00:
Dat kan toch niet als varchar oid opslaat?
Ik zie nergens dat het een varchar is. :) Het formaat komt iig overeen met de manier waarop je standaard ook datumtijd-velden uit MySQL terugkrijgt.

'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.


Acties:
  • 0 Henk 'm!

  • HyperioN
  • Registratie: April 2003
  • Laatst online: 24-05 15:42
Oh..tuurlijk, dom van me. Weer iets geleerd :)

Acties:
  • 0 Henk 'm!

  • BARO
  • Registratie: Mei 2003
  • Laatst online: 05-08 19:47
Het resultaat van
code:
1
SELECT AVG(eind_datum_tijd - begin_datum_tijd) FROM tabel
is in seconden, neem ik aan?

Daarbij wil ik alle entries uit de table selecteren die op een bepaalde datum zijn gepost. Dit doe ik zo:
code:
1
2
3
  $query  = ("SELECT * FROM table WHERE begin_datum_tijd LIKE '" . $vandaag . "' ORDER BY '" . $_SESSION['order'] . "'");
  $result = mysql_query($query) or die('Foutje: ' . mysql_error());
  $aantal = mysql_num_rows($result);


Wat is hier fout aan? (er wordt niks gevonden)

[ Voor 64% gewijzigd door BARO op 08-03-2005 19:19 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

LIKE werkt alleen op strings. Je zal moeten kijken of een tijd tussen 23:59:59 van de dag ervoor en 0:0:00 van de dag erna ligt, gewoon met groterdan/kleinerdan tekens.

Die select die ik postte is volgens mij inderdaad in seconden, maar dat kun je natuurlijk makkelijk zelf even nalopen. :) Converteren van seconden naar een voor jou mooi afdrukbaar formaat moet iig een niet al te groot probleem zijn lijkt me. :)
BARO schreef op dinsdag 08 maart 2005 @ 19:03:
Zal ik alsnog de data en tijden opslaan (en dus omzetten) naar timestamps, of voldoet DATETIME?
Zie mijn eerdere bericht. :)

edit:
Overigens doet een LIKE zonder % als wildcard sowieso niet gek veel voor zover ik weet. :P

[ Voor 31% gewijzigd door NMe op 08-03-2005 19:55 ]

'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.


Acties:
  • 0 Henk 'm!

  • BARO
  • Registratie: Mei 2003
  • Laatst online: 05-08 19:47
Bedankt! Het is gelukt :)
Pagina: 1