Tijd in MySQL
Aangezien ik bezig ben, met een systeem voor Flight Simulator piloten, heb ik een vraag.
Ik heb een programma, die laadt via PHP alle gegevens betreffende één vlucht, in mijn MySQL database. Maar de FlightTime (Totale vliegtijd), voegt hij in als bijv 01:30u. Maar door die : kan MySQL, in de query: SUM() de totale tijd niet berekenen.. Nu is mijn vraag, hoe kan ik MySQL dit wel laten doen?.
De 01:30 staat voor: 1u en 30 minuten. Dus niet 1 minuut en 3 seconden.
Groet,
Brian
Gewijzigd op 22/12/2011 18:46:11 door - Ariën -
Dit is helaas niet mogelijk..
Aangezien ik A: Het programma niet dit commando kan geven. En B: Alle vluchten moeten nog afzonderlijk van elkaar bekeken kunnen worden. En ik hier niet extra een tabel voor ga aanmaken.
En waarom een extra tabel aanmaken?
Code (php)
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function min2uur($mins) {
if ($mins < 0) {
$min = abs($mins);
} else {
$min = $mins;
}
$H = Floor($min / 60);
$M = ($min - ($H * 60)) / 100;
$hours = $H + $M;
if ($mins < 0) {
$hours = $hours * (-1);
}
$expl = explode(".", $hours);
$H = $expl[0];
if (empty($expl[1])) {
$expl[1] = 00;
}
$M = $expl[1];
if (strlen($M) < 2) {
$M = $M . 0;
}
$hours = $H . "." . $M;
return $hours;
}
?>
if ($mins < 0) {
$min = abs($mins);
} else {
$min = $mins;
}
$H = Floor($min / 60);
$M = ($min - ($H * 60)) / 100;
$hours = $H + $M;
if ($mins < 0) {
$hours = $hours * (-1);
}
$expl = explode(".", $hours);
$H = $expl[0];
if (empty($expl[1])) {
$expl[1] = 00;
}
$M = $expl[1];
if (strlen($M) < 2) {
$M = $M . 0;
}
$hours = $H . "." . $M;
return $hours;
}
?>
of mun MySQL met SEC_TO_TIME()
Gewijzigd op 22/12/2011 18:52:42 door - Ariën -
En met extra tabel bedoelde ik, die totale tijd, per piloot, in 1 tabel.
Met gegeven code kan je het aantal secondes invoeren (uit de database bijvoorbeeld), en deze in uren aan je programma doorgeven.
Maar om het voor de piloten handiger te houden, zou ik toch de uren:minuten willen behouden. En daarom vroeg ik; Welke query heb ik hiervoor nodig?.
Toch bedankt, - Aar -.
Maar.... als dat echt niet kan dan kan je de database ook het werk voor je laten doen. Er zijn een groot aantal functies in MySQL om met datum en tijd om te gaan: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html
Zo heb je bijvoorbeeld HOUR() en MINUTE() waarmee je dat deel van de tijd uit het database veld kan halen. Daarmee kan je vervolgens dan weer verder rekenen. Stel je hebt een veld "vluchttijd" in je tabel die aangeeft hoe lang een vlucht heeft geduurd en je wil het totaal aantal uren hebben dan kan dat als volgt:
SELECT SUM( HOUR(vluchttijd)*60 + MINUTE(vluchttijd) )/60 AS totaal FROM tabel
Hier heb ik dan nog rekening gehouden met het overblijvende aantal minuten, maar ik denk dat je daar zelf ook wel mee verder kunt.
Gewijzigd op 22/12/2011 20:09:24 door - SanThe -
Inderdaad, dat is ook wat ik wil. Eerst alle minuten bij elkaar optellen en dan door 60 delen. Je kan het ook binnen de haakjes zetten, maar dan doe je die berekening voor elk record. Eindresultaat zou gelijk moeten zijn, alleen je doet n keer meer berekeningen.
Ha, zo had ik het nog niet bekeken. Netjes.