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!
Makkie:

SELECT SUM(TIMESTAMPDIFF(HOUR, arrival, departure)) flighthours
FROM flightdata 
WHERE pilot_id='1'
AND arrival BETWEEN '2011-01-01' AND NOW()
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?
Wouter, AS is optioneel en en getallen mogen tussen quotes in MySQL
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.
Daar heb je ook weer gelijk in Kees, maar een ID is niet persee een integer vandaar de quotes
Bedankt jongens! Het werkt!
Dat van die AS wist ik niet, handig om te weten!

Ik vind het precies zoals in PHP:
<?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.
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.

[size=xsmall]Toevoeging op 25/12/2011 14:22:33:[/size]

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:
<?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?
@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:
$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 [php]types[/php]. Een van die types is een [php]string[/php]. 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 [php]int[/php]). 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.
Wouter J op 25/12/2011 16:10:05

Een ander type is Intergers (afgekort [php]int[/php]).


Integers.

Reageren