Optellen van data nadat een query is uitgevoerd.
Ik ben op zoek naar een script om data op te tellen dat ik ophaal vanuit de database.
Het ophalen van de data is geen probleem.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$host = "localhost";
$LoginNaam = "";
$Password = "";
$db_name = "";
$tbl_name = "Tabel";
// Hieronder wordt de gewenste data voor het bedrijfsonderdeel en het betreffende jaar opgehaald.
$con = mysql_connect($host, $LoginNaam, $Password);
if (!$con)
{
die(mysql_error("can't connect"));
}
mysql_select_db($db_name, $con) or die(mysql_error("can't find database"));
$result = mysql_query("SELECT Debet, Credit FROM $tbl_name WHERE Rekeninghouder='XXX' AND Boekjaar ='2013' ORDER BY TransactieID ASC ");
mysql_close($con);
?>
$host = "localhost";
$LoginNaam = "";
$Password = "";
$db_name = "";
$tbl_name = "Tabel";
// Hieronder wordt de gewenste data voor het bedrijfsonderdeel en het betreffende jaar opgehaald.
$con = mysql_connect($host, $LoginNaam, $Password);
if (!$con)
{
die(mysql_error("can't connect"));
}
mysql_select_db($db_name, $con) or die(mysql_error("can't find database"));
$result = mysql_query("SELECT Debet, Credit FROM $tbl_name WHERE Rekeninghouder='XXX' AND Boekjaar ='2013' ORDER BY TransactieID ASC ");
mysql_close($con);
?>
Hieronder dan hoe ik de data kan laten zien:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
while (($i <= 5) AND ($data = mysql_fetch_assoc($result))):
{ $i ++;
{ echo '
<th width="164">' . $data['Debet'] . '</th>
<th width="164">' . $data['Credit'] . '</th>
</tr>';
} }
endwhile;
?>
while (($i <= 5) AND ($data = mysql_fetch_assoc($result))):
{ $i ++;
{ echo '
<th width="164">' . $data['Debet'] . '</th>
<th width="164">' . $data['Credit'] . '</th>
</tr>';
} }
endwhile;
?>
Ik krijg dus een mooie tabel met daarin de Debet en Credit gegevens.
Wat ik nu wil is dat de waarde van Debet wordt opgeteld zodat ik een totaal bedrag krijg.
Ik denk dat voordat ik de waarde "echo" deze in een variabele $Debet gestopt moet worden die ik dan optellen.
Bijvoorbeeld met iets als:
Dit script moet ik dan in de While loop plaatsen hierboven anders zal het niet werken,
Maar mijn grootste vraag is. Gaat dit überhaupt werken?
Of bestaat er voor dit soort routines een andere/betere oplossing. Ik ben nog onbekend met formules o.i.d. die ik kan maken een aanroepen,
dus elke suggestie is welkom om het uit te gaan proberen.
Alvast bedankt.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
$DebetTotaal = 0;
while ($data = mysql_fetch_assoc($result))
{
$Debet = $data['Debet'];
$DebetTotaal += $Debet;
}
while ($data = mysql_fetch_assoc($result))
{
$Debet = $data['Debet'];
$DebetTotaal += $Debet;
}
Het is altijd netjes om vóór je het totaal gaat berekenen, eerst de betreffende variabele op 0 te initialiseren.
Eventueel is $Debet niet eens nodig: je kan ook $DebetTotaal += $data['Debet'] uitvoeren.
haal ook even die tbl_name uit de quotes.
dus niet
Code (php)
1
2
3
2
3
<?php
$result = mysql_query("SELECT Debet, Credit FROM $tbl_name WHERE Rekeninghouder='XXX' AND Boekjaar ='2013' ORDER BY TransactieID ASC ");
?>
$result = mysql_query("SELECT Debet, Credit FROM $tbl_name WHERE Rekeninghouder='XXX' AND Boekjaar ='2013' ORDER BY TransactieID ASC ");
?>
maar
Code (php)
1
2
3
2
3
<?php
$result = mysql_query("SELECT Debet, Credit FROM ".$tbl_name." WHERE Rekeninghouder='XXX' AND Boekjaar ='2013' ORDER BY TransactieID ASC ");
?>
$result = mysql_query("SELECT Debet, Credit FROM ".$tbl_name." WHERE Rekeninghouder='XXX' AND Boekjaar ='2013' ORDER BY TransactieID ASC ");
?>
Frank Nietbelangrijk op 17/04/2013 01:15:04:
je kunt ook sql gebruiken om je totalen te berekenen. Gewoon nog een keer een query uitvoeren.
Gezien de conditie i<=5 die in de while-loop staat, is het dan wel noodzakelijk een LIMIT 5 aan de query toe te voegen. Dat is sowieso wel handig eigenlijk. Ik vind het altijd zonde om een query halverwege af te breken. ;-)
Quote:
haal ook even die tbl_name uit de quotes.
Waarom? Het is perfect valide om die binnen de quotes te hebben. En nog beter leesbaar ook...
Gewijzigd op 17/04/2013 01:34:27 door Willem vp
echt niet. de editor kleurt ze nu rood in plaats van blauw. Bovendien moet php nu escapen dat tijd kost.
daarnaast de verwarring tussen single quotes en double quotes. als laatste in algemene programmeer termen:
je hebt variabelen en tekst. een variabele zet je dus niet tussen qoutes want dan is het tekst. in geen enkele taal behalve in php zal dit werken.
Frank Nietbelangrijk op 17/04/2013 01:54:19:
beter leesbaar?
echt niet. de editor kleurt ze nu rood in plaats van blauw.
echt niet. de editor kleurt ze nu rood in plaats van blauw.
Dat is een kwestie van een goede editor gebruiken. Bij mij worden variabelen die binnen quotes staan gewoon gekleurd. Wat ik juist heel vaak zie, en dat is vooral heel extreem bij het opbouwen van sql-queries, is dat het zo'n wirwar van quotes en punten wordt, dat je door de syntax highlighting in zo'n editor wel meteen kan zien dat je code syntactisch correct is voor PHP, maar niet of de gegenereerde string klopt. Vooral bij sql-queries mist er hier en daar nog wel eens een quote of staat er een haakje verkeerd.
Quote:
Bovendien moet php nu escapen dat tijd kost.
Die mythe heb ik op dit forum al in 2005 ontkracht. Wanneer je een string hebt met veel variabelen is PHP door alle context switches juist langzamer. Maar ook dan praat je over microseconden. Het heet niet voor niets micro-optimalisatie. ;-) Tot aan PHP 4.2 zat er inderdaad een wat groter performanceverschil tussen, maar dat is met ingang van PHP 4.3 (27 december 2002) al verholpen.
Quote:
daarnaast de verwarring tussen single quotes en double quotes. als laatste in algemene programmeer termen:
je hebt variabelen en tekst. een variabele zet je dus niet tussen qoutes want dan is het tekst.
je hebt variabelen en tekst. een variabele zet je dus niet tussen qoutes want dan is het tekst.
Nu begin je met de opmerking dat er verwarring is tussen single en double quotes, maar je gaat er verder niet op in. Merkwaardig... Eigenlijk ook niet, want zo verwarrend is het niet. ;-) Je hebt strings met enkele quotes en strings met dubbele quotes. De strings met enkele quotes zijn voor literals en de strings met dubbele quotes doen aan variable expansion.
Als je uit de C-wereld komt is het misschien wat verwarrender, omdat je in C met single quotes een enkele karakter aangeeft en met double quotes een string. Double quotes gebruiken voor strings voelt dan natuurlijker.
Quote:
in geen enkele taal behalve in php zal dit werken.
Variable expansion bestond al in LISP (een programmeertaal uit 1958). Maar ook in recentere talen als Perl, Ruby, Tcl en Groovy werkt dit (ongetwijfeld meer, maar ik ken ook niet alle talen). En niet te vergeten alle Unix-shells. Dat wordt in die talen vereenvoudigd doordat variabelen worden aangeduid met een sigil (meestal een $) zodat de parser eenvoudig kan zien of iets een variabele is of niet.
Variable expansion is een feature die juist bedacht is voor talen waarin veel met strings wordt gewerkt. Je gaat dus eigenlijk tegen de ontwerpprincipes van PHP in door zo krampachtig al je variabelen buiten de quotes te houden.
Waar het mij overigens om gaat is niet of je je variabelen binnen of buiten quotes zet. Waar het mij om gaat is dat dat de beslissing is van de programmeur. Ik kan er slecht tegen als iemand (vooral als het mensen zijn die maar half weten waar ze het over hebben) tegen een ander gaat lopen roepen dat hij zijn werk op een andere manier moet doen, terwijl die ander zijn werk niet eens op een verkeerde manier deed.
Als iemand anders zijn werk op een andere manier doet dan jij, hoeft dat niet meteen een verkeerde manier te zijn. Het kan zijn dat juist jij je werk op een verkeerde manier doet. Of misschien doe je het allebei wel goed (of fout). ;-) Er is meestal niet 1 juiste manier om een probleem op te lossen. En of een manier beter is dan een andere hangt vaak ook nog van de omstandigheden af (en die kunnen elke keer verschillen). Degene die die omstandigheden het best kan beoordelen is de programmeur en je moet dan niet als een blind nijlpaard gaan lopen roepen dat de programmeur het fout doet.
Ik vind het altijd grappig om te zien hoe een eenvoudige vraag kan leiden tot een discussie die helemaal niet meer over de eerste vraag gaat. En...... ik haal ook daar weer bruikbare informatie uit.
Frank, bedankt voor de tip. Ik ga de SUM query ook proberen.
Willem, de i<=5 stond er eigenlijk nog in vanuit een ander script. Maar ik wil b.v. van een heel jaar alle Debet standen kunnen optellen. Dus die beperking gaat er wel uit, maar je opmerking is gewaardeerd.
Bedankt weer voor de informatie.
Gr. Carl.