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.
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
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