Uren tellen met DATETIME

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Robin Djie

Robin Djie

21/12/2011 23:28:48
Quote Anchor link
Hallo ik heb een vraag m.b.t. het tellen van uren in Mysql.
Het zit zo:
Ik heb een tabel 'vluchten'. Hierin worden alle vluchten van een vliegveld in gezet.
Deze tabel heeft een kolom 'opstijgtijd' en 'aankomsttijd'. Allebei zijn in DATETIME gedefinieerd. Een voorbeeld van de tabel:

ID aankomsttijd piloot_id
0 2011-11-28 16:10:00 2011-11-28 16:50:00 1
1 2011-12-25 12:56:00 2011-12-25 18:00:52 1


Mijn vraag is nu: Hoe schrijf ik de query (of een combinatie van PHP en sql) die per jaar (of ieder ander tijdseenheid) het totaal aantal vlieguren van een bepaald persoon uitrekent (in dit geval persoon/piloot met id '1'.
Alvast bedankt!
Gewijzigd op 21/12/2011 23:33:10 door Robin Djie
 
PHP hulp

PHP hulp

22/12/2024 16:14:36
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

22/12/2011 08:11:16
Quote Anchor link
Makkie:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT SUM(TIMESTAMPDIFF(HOUR, arrival, departure)) flighthours
FROM flightdata
WHERE pilot_id='1'
AND arrival BETWEEN '2011-01-01' AND NOW()
Gewijzigd op 22/12/2011 08:14:30 door Ger van Steenderen
 
Wouter J

Wouter J

22/12/2011 09:30:44
Quote Anchor link
Alleen is pilot_id='1' fout. 1 is geen string, maar een cijfer dus zonder quotes: pilot_id=1
En vergeet je niet de AS tussen sum(...) en filghthour?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

22/12/2011 09:43:34
Quote Anchor link
Wouter, AS is optioneel en en getallen mogen tussen quotes in MySQL
 
Kees Schepers

kees Schepers

22/12/2011 09:59:55
Quote Anchor link
Theoretisch is het sneller om ze als integer mee te geven zodat ze dan niet geconverteerd hoeven te worden :p flauw, maar wel waar.

Met de AS heb je overigens wel gelijk, die gebruikte ik vroeger ook veel maar in veel database systemen is dat niet verplicht inderdaad.
Gewijzigd op 22/12/2011 10:00:49 door kees Schepers
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

22/12/2011 10:19:55
Quote Anchor link
Daar heb je ook weer gelijk in Kees, maar een ID is niet persee een integer vandaar de quotes
 
Robin Djie

Robin Djie

22/12/2011 11:38:35
Quote Anchor link
Bedankt jongens! Het werkt!
 
Wouter J

Wouter J

22/12/2011 18:10:55
Quote Anchor link
Dat van die AS wist ik niet, handig om te weten!

Ik vind het precies zoals in PHP:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$id
= '1';
?>

Is gewoon fout PHP, ja PHP keurt het goed, maar het is gewoon goed fout. Dat werkt ook zo in SQL, id='1' is gewoon fout SQL maar het wordt inderdaad helaas wel goed gerekend.
 
Bartje Jansen

Bartje Jansen

25/12/2011 14:19:35
Quote Anchor link
Wouter J op 22/12/2011 09:30:44:
Alleen is pilot_id='1' fout. 1 is geen string, maar een cijfer dus zonder quotes: pilot_id=1
En vergeet je niet de AS tussen sum(...) en filghthour?

2x onzin, voor de database is het datatype gedefinieerd in de tabelstructuur en totaal niet afhankelijk van een quote of geen quote. Zie de handleiding van jouw database.

Er zijn datatypes waar het gebruik van quotes verplicht is, maar dat is wat anders.

AS is volgens de SQL standaarden optioneel en dus valt er niets te vergeten.

Toevoeging op 25/12/2011 14:22:33:

Wouter J op 22/12/2011 18:10:55:
Dat van die AS wist ik niet, handig om te weten!

Ik vind het precies zoals in PHP:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$id
= '1';
?>

Is gewoon fout PHP, ja PHP keurt het goed, maar het is gewoon goed fout. Dat werkt ook zo in SQL, id='1' is gewoon fout SQL maar het wordt inderdaad helaas wel goed gerekend.

Dit is niet fout! Het is met MySQL zelfs noodzakelijk wanneer je met mysql_real_escape_string() jezelf probeert te beschermen tegen SQL injection.

En mocht het volgens jou toch fout zijn, kun je dan even een linkje naar de handleiding van MySQL geven waarin staat dat het fout is om quotes te gebruiken?
Gewijzigd op 25/12/2011 14:20:38 door Bartje Jansen
 
Wouter J

Wouter J

25/12/2011 16:10:05
Quote Anchor link
@Bartje, bedankt voor je bericht. Alleen het had wel iets vriendelijker gemogen, het is immers kerst! En daarnaast heb ik voor het 2e punt al gezegd dat ik het niet wist, dus je hoeft me niet zo af te branden. Bedankt...

Bartje Jansen:
Dit is niet fout! Het is met MySQL zelfs noodzakelijk wanneer je met mysql_real_escape_string() jezelf probeert te beschermen tegen SQL injection.

En daarom moet je mysql_real_escape_string ook alleen maar bij strings gebruiken en niet bij getallen. Bij getallen gebruik je typecasten zoals dat heet. Bijv:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
$mijnString = 'Wouter';
$mijnGetal = '10';

var_dump( (int) $mijnString); // Geeft int 0
var_dump( (int) $mijnGetal); // Geeft int 10

Bertje Jansen:
En mocht het volgens jou toch fout zijn, kun je dan even een linkje naar de handleiding van MySQL geven waarin staat dat het fout is om quotes te gebruiken?

Dat kan ik niet, maar ik kan het je wel nog een keer logisch proberen uit te leggen. Ik neem nu even PHP als voorbeeld, maar deze regels werken in elke taal (dus ook SQL).
In PHP hebt je verschillende types. Een van die types is een string. Een string is een stuk tekst en je maakt een string door de value tussen quotes te zetten (enkel of dubbel, maakt in de meeste talen niet uit (C# kan alleen dubbel)). $var = 'Wouter' hierbij is Wouter een string.
Een ander type is Intergers (afgekort int). Dit wordt gebruikt voor getallen, deze getallen worden zonder quotes geschreven. Mocht het met quotes worden geschreven dan wordt dit getal niet gezien als een int, maar als een string. Het is immers tussen quotes.

Nu gaan we terug naar het voorbeeld, hierbij hebben we het getal 1. Een getal is een int en geen string, dus we gebruiken de methode om een int te schrijven: Zonder quotes.

En ja, nogmaals, het mag wel met quotes. Alleen dat is omdat veel scripttalen vriendelijk zijn. Ze zeggen, ach er zullen veel gebruikers zijn die dit fout gaan doen, laten we int tussen quotes ook maar goed rekenen. Het wordt dus wel gedaan en het mag ook, maar het is niet strict correct.
 
- SanThe -

- SanThe -

25/12/2011 17:27:23
Quote Anchor link
Wouter J op 25/12/2011 16:10:05:
Een ander type is Intergers (afgekort int).


Integers.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

25/12/2011 17:47:14
Quote Anchor link
probeer maar eens in asp.net dit soort geintejs
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.