ik wil een while loop in een while loop zetten.
maar dit werkt niet ?
weet iemand waarom niet en hoe het dan wel moet.
alvast bedankt.

$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 &euro; ".round($betaling, 2)." ex BTW</strong><br><hr></div>";
$i=$i+$betaling;


}
else{};
}
Wat er mis gaat heeft te maken met een principe genaamd "Variable scope".
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!
persoonlijk ben ik geen voorstander van nummertjes in variabelen. Dit gaat ten koste van de leesbaarheid.
Daar ben ik het mee eens, raad dan ook aan bijvoorbeeld $persoonResults, $persoonRow en $zeilenResults en $zeilenRow te gebruiken.
Het ging hier echter hoofdzakelijk om het principe maar zal in het vervolg betere voorbeelden geven
Het herhaaldelijk uitvoeren van queries met het resultaat van een andere query binnen een loop is maar zelden nodig. Daar zijn joins voor:

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


Sterk aanbevolen is om geen min-tekens in tabelnamen te gebruiken
dit is hem had alleen de COUNT i.p.v de SUM functie nodig bedankt Ger.

[size=xsmall]Toevoeging op 03/03/2015 10:57:20:[/size]

sorry voor mij late reactie had wat problemen met in inloggen.
maar dat was al bekend volgens mij ?
Was hem toch niet hij doet hele gekken dingen als ik de query van Ger gebruik geeft hij als resultaat

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



[size=xsmall]Toevoeging op 04/03/2015 14:32:42:[/size]

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


dit was hem !
Waarom werkte het eerst dan niet? Je hebt nu dezelfde query die ik gaf.

Reageren