while loop in while loop
maar dit werkt niet ?
weet iemand waarom niet en hoe het dan wel moet.
alvast bedankt.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
$query = "SELECT DISTINCT `Naamkoopman` FROM `Data-reclameopdemarkt`ORDER BY Naamkoopman ASC ";
$results = mysql_query($query);
while($row = mysql_fetch_assoc($results) ){
$persoon = $row['Naamkoopman'];
$qry = 'SELECT `Aantal`
FROM `Betaling`
WHERE `Week` <14
AND `Naamkoopman` = "'.$persoon.'"
';
$result = mysql_query($qry);
while($row = mysql_fetch_assoc($result)){
$zeilen = $zeilen+$row['Aantal'];
}
$betaling = $zeilen*"6.092307692307692";
$betaling = $betaling*"1.21";
If($betaling>0){
echo "<div style='float:left;width:50%;'>
<h5>Betaling ".$persoon."</h5><br>
<strong>Ontvangsten over 1 Kwartaal zijn € ".round($betaling, 2)." ex BTW</strong><br><hr></div>";
$i=$i+$betaling;
}
else{};
}
$results = mysql_query($query);
while($row = mysql_fetch_assoc($results) ){
$persoon = $row['Naamkoopman'];
$qry = 'SELECT `Aantal`
FROM `Betaling`
WHERE `Week` <14
AND `Naamkoopman` = "'.$persoon.'"
';
$result = mysql_query($qry);
while($row = mysql_fetch_assoc($result)){
$zeilen = $zeilen+$row['Aantal'];
}
$betaling = $zeilen*"6.092307692307692";
$betaling = $betaling*"1.21";
If($betaling>0){
echo "<div style='float:left;width:50%;'>
<h5>Betaling ".$persoon."</h5><br>
<strong>Ontvangsten over 1 Kwartaal zijn € ".round($betaling, 2)." ex BTW</strong><br><hr></div>";
$i=$i+$betaling;
}
else{};
}
Meer hier over op php.netphp.net
Dat hele verhaal (en ik raad aan het even door te lezen!) komt neer op 1 simpel punt:
In de definitie van de 1e while-loop gebruik je 2 variabelen: $results en $row.
Daarna vul je in die loop zelf de variabelen opnieuw, waardoor de waarde ervan veranderd. Hierdoor weet de while-loop niet meer waar deze overheen moet lopen (hoe dit exact werkt heeft te maken met werkgeheugen, array-pointers en ander C meuk wat iets te ver gaat om uit te leggen).
tl;dr:
Je moet de variabele $row en $result niet opnieuw toewijzen in de loop. Gebruik hier een andere naam ($row2 $result2 ofzo) en het zal werken.
Succes!
Gewijzigd op 02/03/2015 08:24:23 door Thom nvt
persoonlijk ben ik geen voorstander van nummertjes in variabelen. Dit gaat ten koste van de leesbaarheid.
Het ging hier echter hoofdzakelijk om het principe maar zal in het vervolg betere voorbeelden geven
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
SELECT
d.Naamkoopman,
ROUND(IFNULL(SUM(b.Aantal), 0) * 6.092307692307692 * 1.21, 2) betaling
FROM
`Data-reclameopdemarkt` d
LEFT JOIN
Betaling b
ON d.Naamkoopman = b.Naamkoopman
AND b.week < 14
GROUP BY
d.Naamkoopman
d.Naamkoopman,
ROUND(IFNULL(SUM(b.Aantal), 0) * 6.092307692307692 * 1.21, 2) betaling
FROM
`Data-reclameopdemarkt` d
LEFT JOIN
Betaling b
ON d.Naamkoopman = b.Naamkoopman
AND b.week < 14
GROUP BY
d.Naamkoopman
Sterk aanbevolen is om geen min-tekens in tabelnamen te gebruiken
Toevoeging op 03/03/2015 10:57:20:
sorry voor mij late reactie had wat problemen met in inloggen.
maar dat was al bekend volgens mij ?
Sum b.aantal * aantal markten die de persoon heeft.
dus bert heeft 4 markten en heeft 2 x 2 zeilen opgehangen
de uitkomst moet dus 4 zijn maar is nu 16.
ben al uren met DISTINCT bezig maar geen idee waar ik die moet plaatsen.
kunnen jullie er nog even naar kijken
alvast bedankt
Toevoeging op 04/03/2015 14:32:42:
Code (php)
1
2
3
4
5
2
3
4
5
SELECT d.Naamkoopman, ROUND( IFNULL( SUM( b.Aantal ) , 0 ) * 6.092307692307692 * 1.21, 2 ) betaling
FROM `Data-reclameopdemarkt` d
LEFT JOIN Betaling b ON d.ID = b.Marktid
AND b.week <14
GROUP BY d.Naamkoopman
FROM `Data-reclameopdemarkt` d
LEFT JOIN Betaling b ON d.ID = b.Marktid
AND b.week <14
GROUP BY d.Naamkoopman
dit was hem !
Waarom werkte het eerst dan niet? Je hebt nu dezelfde query die ik gaf.