login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Apart berekenen van gegevens

Offline Chilion - 25/04/2008 10:06 (laatste wijziging 25/04/2008 10:06)
Avatar van ChilionMySQL interesse Nadat Tommy me hier heeft geholpen, nog een kleine aanpassing nodig, who can help?

ik bereken op dit moment de uren uit een database, met verschillende werkcodes.

Dat doe ik op deze manier:
  1. <?php
  2. $sQuery = "SELECT projectcode, werkcode, werknemer, begintijd, eindtijd FROM urenregistratie WHERE (projectcode = '".$order."') and (datum = '".$datum."') ORDER BY projectcode, datum, werknemer, begintijd";
  3. $result = mssql_query("SELECT Datum, Projectcode, Werknemer, Begintijd, Eindtijd FROM urenregistratie WHERE (Projectcode = '".$order."') and (Datum = '".$datum."') ORDER BY Begintijd");
  4.  
  5. // Resultaten doorlopen
  6. echo 'Ordernummer: '.$order;
  7. echo "<br>";
  8. echo 'Datum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: '. $datum;
  9. echo "<br>";
  10. echo "<br>";
  11.  
  12. $res = mssql_query($sQuery);
  13.  
  14. if ($res && mssql_num_rows($res) >= 1)
  15. {
  16. echo '<table BGCOLOR="666666" WIDTH="60%" BORDER=2 BORDERCOLOR="BLACK" CELLPADDING=2 CELLSPACING=1 STYLE="font-size: 12px;">';
  17. echo '<tr>';
  18. echo '<th width="20%"><FONT COLOR="FFFFFF">Projectcode</FONT></th>';
  19. echo '<th width="20%"><FONT COLOR="FFFFFF">Werknemer</FONT></th>';
  20. echo '<th width="30%"><FONT COLOR="FFFFFF">Werkcode</FONT></th>';
  21. echo '<th width="10%"><FONT COLOR="FFFFFF">Begintijd</FONT></th>';
  22. echo '<th width="10%"><FONT COLOR="FFFFFF">Eindtijd</FONT></th>';
  23. echo '<th width="10%"><FONT COLOR="FFFFFF">Uren</FONT></th>';
  24. echo '</tr>';
  25.  
  26. while ($row = mssql_fetch_array($res))
  27. {
  28.  
  29. // begintijd bewerken,
  30. $begintijd_uren = (int)substr($row['begintijd'], '0', '2');
  31. $begintijd_minuten = (int)substr($row['begintijd'], '3', '2');
  32.  
  33.  
  34.  
  35. // Idem voor de eindtijd
  36. $eindtijd_uren = (int)substr($row['eindtijd'], '0', '2');
  37. $eindtijd_minuten = (int)substr($row['eindtijd'], '3', '2');
  38.  
  39.  
  40.  
  41. // Eerst het verschil in uren
  42. $verschil_uren = $eindtijd_uren - $begintijd_uren;
  43.  
  44. // Dan het verschil in minuten
  45. $verschil_minuten = ($eindtijd_minuten - $begintijd_minuten) / '60';
  46.  
  47. // Het totale verschil
  48. $verschil_totaal = $verschil_uren + $verschil_minuten;
  49.  
  50. //totale uren van project
  51. $totaal = $totaal + $verschil_totaal;
  52.  
  53. //decimaal afronden
  54. $getald = number_format($verschil_totaal, 2);
  55. $getalt = number_format($totaal, 2);
  56.  
  57. ?>

Echter, nu is er 1 Werkcode die afzonderlijk berekent moet worden, dat is de de code:
"M01 Reisuren"
Hoe kan ik die afzonderlijk bereken? Een IF - ELSE statement is misschien wel een goed idee, alleen die krijg ik niet aan de praat (A)

Chilion

19 antwoorden

Gesponsorde links
Offline Kr4nKz1n - 25/04/2008 10:11
Avatar van Kr4nKz1n Onbekend I have no idea what you talking about.

Waar haal je M01 Reisuren vandaan?

Hoe moet die berekent worden (naar wat etc.).

Iets meer informatie dankje 

(Kan zijn dat ik er overheen kijk, ben net 5 min. wakker )
Offline Abbas - 25/04/2008 10:14
Avatar van Abbas Gouden medaille

Crew .NET
Wat is "mssql_query"? Moet dit niet "mysql_query" zijn?
Offline Chilion - 25/04/2008 10:14 (laatste wijziging 25/04/2008 10:15)
Avatar van Chilion MySQL interesse M01 is een werkcode,
Alle uren moeten opgeteld worden, zodat ik kan zien hoeveel een medewerker heeft gewerkt, en in dit geval hoeveel uur er op dit project is gewerkt.

Ik wil nu dus dat alle werkcode BEHALVE M01 Reisuren berekend worden bij elkaar op, en dat M01 Reisuren apart berekend wordt! 

@titjes, nee, ik gebruik MSSQL.
Offline Kr4nKz1n - 25/04/2008 10:22
Avatar van Kr4nKz1n Onbekend Oke, nu nog even op weg helpen.

Waar haal ik M01 vandaan, welke var.
Welke opmaak heeft deze var.
Wat moet er berekend worden.
Offline Chilion - 25/04/2008 10:31
Avatar van Chilion MySQL interesse De var =

$row['werkcode']

de opmaak is gewoon text.
Er moet berekent worden wat de uren zijn die hierop gemaakt zijn. Eventueel kan ik de gehele code hier wel plakken.

Chilion
Offline Kr4nKz1n - 25/04/2008 10:41
Avatar van Kr4nKz1n Onbekend Ja plak maar. Ik snap niet waar ik de tijd vandaan moet halen etc.
Offline Chilion - 25/04/2008 10:46
Avatar van Chilion MySQL interesse
  1. <HTML>
  2. <body>
  3. <font face="Tahoma, Helvetica, sans-serif" size=2>
  4. <?php
  5.  
  6. //inloggegevens staan wel vermeld in orgineel
  7.  
  8. $Connection = mssql_connect($SERVER, $ADMIN_NAME, $ADMIN_PASS)
  9. or die ("Can't connect to Microsoft SQL Server");
  10.  
  11. mssql_select_db($DATABASE, $Connection)
  12. or die ("Can't connect to Database");
  13.  
  14. $order = $_POST['order'];
  15. $datum = $_POST['datum'];
  16.  
  17. $sQuery = "SELECT projectcode, werkcode, werknemer, begintijd, eindtijd FROM urenregistratie WHERE (projectcode = '".$order."') and (datum = '".$datum."') ORDER BY projectcode, datum, werknemer, begintijd";
  18. $result = mssql_query("SELECT Datum, Projectcode, Werknemer, Begintijd, Eindtijd FROM urenregistratie WHERE (Projectcode = '".$order."') and (Datum = '".$datum."') ORDER BY Begintijd");
  19.  
  20. // Resultaten doorlopen
  21. echo 'Ordernummer: '.$order;
  22. echo "<br>";
  23. echo 'Datum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: '. $datum;
  24. echo "<br>";
  25. echo "<br>";
  26.  
  27. $res = mssql_query($sQuery);
  28.  
  29. if ($res && mssql_num_rows($res) >= 1)
  30. {
  31. echo '<table BGCOLOR="666666" WIDTH="60%" BORDER=2 BORDERCOLOR="BLACK" CELLPADDING=2 CELLSPACING=1 STYLE="font-size: 12px;">';
  32. echo '<tr>';
  33. echo '<th width="20%"><FONT COLOR="FFFFFF">Projectcode</FONT></th>';
  34. echo '<th width="20%"><FONT COLOR="FFFFFF">Werknemer</FONT></th>';
  35. echo '<th width="30%"><FONT COLOR="FFFFFF">Werkcode</FONT></th>';
  36. echo '<th width="10%"><FONT COLOR="FFFFFF">Begintijd</FONT></th>';
  37. echo '<th width="10%"><FONT COLOR="FFFFFF">Eindtijd</FONT></th>';
  38. echo '<th width="10%"><FONT COLOR="FFFFFF">Uren</FONT></th>';
  39. echo '</tr>';
  40.  
  41. while ($row = mssql_fetch_array($res))
  42. {
  43. // begintijd bewerken,
  44. $begintijd_uren = (int)substr($row['begintijd'], '0', '2');
  45. $begintijd_minuten = (int)substr($row['begintijd'], '3', '2');
  46.  
  47.  
  48.  
  49. // Idem voor de eindtijd
  50. $eindtijd_uren = (int)substr($row['eindtijd'], '0', '2');
  51. $eindtijd_minuten = (int)substr($row['eindtijd'], '3', '2');
  52.  
  53.  
  54.  
  55. // Eerst het verschil in uren
  56. $verschil_uren = $eindtijd_uren - $begintijd_uren;
  57.  
  58. // Dan het verschil in minuten
  59. $verschil_minuten = ($eindtijd_minuten - $begintijd_minuten) / '60';
  60.  
  61. // Het totale verschil
  62. $verschil_totaal = $verschil_uren + $verschil_minuten;
  63.  
  64. //totale uren van project
  65. $totaal = $totaal + $verschil_totaal;
  66.  
  67. //decimaal afronden
  68. $getald = number_format($verschil_totaal, 2);
  69. $getalt = number_format($totaal, 2);
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77. echo '<tr BGCOLOR="FFFFFF">';
  78. echo '<td ALIGN="CENTER">'.$row['projectcode'].'</td>';
  79. echo '<td ALIGN="CENTER">'.$row['werknemer'].'</td>';
  80. echo '<td>'.$row['werkcode'].'</td>';
  81. echo '<td ALIGN="CENTER">'.$row['begintijd'].'</td>';
  82. echo '<td ALIGN="CENTER">'.$row['eindtijd'].'</td>';
  83. echo '<td ALIGN="CENTER">'. $getald. '</td>';
  84.  
  85.  
  86.  
  87. }
  88. echo '</tr>';
  89. echo '<tr>';
  90. echo '<td><font color=white>Totaal op dit Project:</font></td>';
  91. echo '<td></td>';
  92. echo '<td></td>';
  93. echo '<td></td>';
  94. echo '<td></td>';
  95. echo '<td><font color=white><b>'.$getalt.' uren</b></font> </td>';
  96. echo '</tr>';
  97. echo '</table>';
  98.  
  99. } else {
  100. echo "<br>";
  101. echo 'Geen data gevonden.';
  102. }
  103.  
  104.  
  105. mssql_close($Connection);
  106. ?>
  107. </body>
  108. </html>



Trouwens, ik ben heel erg trots op al mijn overbodige echotjes, lever daar dus maar geen commentaar op 
Offline Kr4nKz1n - 25/04/2008 10:52
Avatar van Kr4nKz1n Onbekend Ik zie dat je al heel veel met die tijden berekend. Waar zijn deze dan voor?

Want ik snap er echt niks van. Je zegt tijd berekenen maar je zegt dat $ro['werkcode'] gewoon text bevat.

Om dit te berekenen heb je een begin en eind tijd nodig. Deze zie ik maar 1 keer, en deze bereken je al.
Offline Chilion - 25/04/2008 10:55
Avatar van Chilion MySQL interesse Dit zijn reisuren, deze mogen niet meegenomen worden in de berekening van de uren, de reisuren moeten apart berekend worden.

Chilion
Offline Kr4nKz1n - 25/04/2008 10:56
Avatar van Kr4nKz1n Onbekend Oke en welke velden heb ik nodig waar de tijden in staan dan?
Offline Chilion - 25/04/2008 10:58
Avatar van Chilion MySQL interesse dat zijn begintijd en eindtijd

Offline Kr4nKz1n - 25/04/2008 10:59
Avatar van Kr4nKz1n Onbekend In 1 veld? Je zegt net dat er alleen maar text in staat.

Kerel, zo komen we niet verder.
Leg uit welke velden ik moet gebruiken, wat de opmaak en inhoud hier van is en hoe die moeten berekend worden.
Offline Chilion - 25/04/2008 11:12
Avatar van Chilion MySQL interesse Maar ik snap niet helemaal wat je bedoeld (A)

De Query staat hierbij toch?

Chilion
Offline Kr4nKz1n - 25/04/2008 11:30
Avatar van Kr4nKz1n Onbekend Ja maar welke velden moet ik gebruiken om de tijdsbestek uit te rekenen?
Alleen met werkcode heb ik gewoon normale tekst zei je.
Offline Chilion - 25/04/2008 11:39
Avatar van Chilion MySQL interesse Om te berekenen hoelang ze ermee bezig zijn?
Dat zijn de begintijd en de eindtijd kolom.
Ik dacht zelf aan een IF ELSE statement, maar dat lukte me niet helemaal.

Opzet is dat hij alles berekent, behalve de reisuren (M01 Reisuren) die moeten apart berekend worden, en die tijden komen uit begintijd & eindtijd
Offline Kr4nKz1n - 25/04/2008 12:11 (laatste wijziging 25/04/2008 13:15)
Avatar van Kr4nKz1n Onbekend
  1. // begintijd bewerken,
  2. $begintijd_uren = (int)substr($row['begintijd'], '0', '2');
  3. $begintijd_minuten = (int)substr($row['begintijd'], '3', '2');
  4.  
  5.  
  6.  
  7. // Idem voor de eindtijd
  8. $eindtijd_uren = (int)substr($row['eindtijd'], '0', '2');
  9. $eindtijd_minuten = (int)substr($row['eindtijd'], '3', '2');


Wat is dat dan?
Offline Chilion - 25/04/2008 12:51
Avatar van Chilion MySQL interesse Daar berekent hij het dus.
Maar hij moet dus alles berekenen behalve de reisuren.

Offline Kr4nKz1n - 25/04/2008 13:16
Avatar van Kr4nKz1n Onbekend wat zijn de reisuren dan? waar haal je die vandaan? 
Offline walldorff - 25/04/2008 14:01 (laatste wijziging 25/04/2008 14:07)
Avatar van walldorff Nieuw lid Probeer je sql statement zodanig aan te passen, dat dáár het rekenwerk gebeurt. Gebruik timediff()

TIMEDIFF(expr1,expr2)
TIMEDIFF() returns expr1 – expr2 expressed as a time value. expr1 and expr2 are time or date-and-time expressions, but both must be of the same type.

mysql> SELECT TIMEDIFF('2000:01:01 00:00:00',
-> '2000:01:01 00:00:00.000001');
-> '-00:00:00.000001'

mysql> SELECT TIMEDIFF('1997-12-31 23:59:59.000001',
-> '1997-12-30 01:01:01.000002');
-> '46:58:57.999999'


zie: http://dev.mysq...n_timediff

Voer desnoods 2 queries uit, waarin je in de ene de reisuren berekent en met een where clause alle andere info weglaat; de 2e query bevat dan alles behalve de reisuren. Dit gaat sneller dan een loop.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.412s