Door
Robin Djie
op 21-12-2011 23:28
gewijzigd op 21-12-2011 23:33
2.809 views
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:
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!
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.
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.