Vraag & Antwoord

Webprogrammeren & scripting

[php & mysql] loop binnen een loop

8 antwoorden
  • Situatieschets: Ik heb 4 tabellen in m'n mysql db: 1. leverancier 2. bekledingtypen 3. stoelen 4. koppeltabel bekleding_stoelen Nu is het zo, een leverancier heeft een assortiment stoelen en een assortiment bekleding. Voor elke stoel zijn een aantal bekledingstypen mogelijk (maar niet allemaal!). nu wil ik in een cms-je aangeven welke bekleding er nog aan een stoel gekoppeld kan worden. Dus de kleding van dezelfde leverancier als de geselecteerde stoel, maar waar nog geen relatie is aangemaakt in de koppeltabel. Ik wilde dit doen door middel van een for-loop binnen een for-loop: [code:1:1df38551b9] $rs = $myDBC->getData("SELECT bekleding_id,naam FROM bekleding WHERE leverancier_id = '" . $_POST['leverancier'] . "'"); $num = mysql_num_rows($rs); $ss = $myDBC->getData("SELECT * FROM stoel_bekleding WHERE stoel_id = '" . $_POST['stoel'] . "'"); $oum = mysql_num_rows($ss); for($i=0 ; $i < $num ; $i++ ){ $naam = mysql_result($rs, $i, 'naam'); $id = mysql_result($rs, $i, 'bekleding_id'); for ($n=0 ; $n < $oum ; $n++){ $bestaand = mysql_result($ss, $n, 'bekleding_id'); if($id != $bestaand){ echo "<div style=\"float: left;\"><input type='checkbox' value='" . $id . "'> " . $naam . "<br></div>"; } } } [/code:1:1df38551b9] Het is dus de bedoeling dat de bekleding van dezelfde leverancier als de stoel die nog niet is gekoppelt wordt weergegeven met een checkbox. Het lijkt erop dat met het doorlopen van de eerste for-loop de tweede for-loop en if-statement worden genegeerd. Weet iemand wat ik over het hoofd zie?
  • Dit is de eerste keer dat ik dergelijke loops zie voor gegevens uit een databank te halen, misschien ligt het daar aan?
  • echt waar? Hoe parse jij je results van een resultset dan?
  • de gebruikelijke procedure is volgens mij mysql_fetch_array/assoc/row te gebruiken op een result en hierop eventueel ifs en dergelijke op los te laten... http://nl.php.net/manual/en/function.mysql-fetch-array.php http://nl.php.net/manual/en/function.mysql-fetch-assoc.php http://nl.php.net/manual/en/function.mysql-fetch-row.php
  • Ik gebruik iets in de aard van:[code:1:a2668916c3]$res = mysql_query ("SELECT ...", $db); while ($ligne = mysql_fetch_object ($res)) { ... }[/code:1:a2668916c3]
  • oke, dat doe ik in principe ook, ik gebruik alleen een andere loop.
  • Volgens mij moet het mogelijk zijn om je stoelen en/of bekleding te outer-joinen op de koppeltabel. Daar waar je null values terugkrijgt is dan nog geen koppeling gemaakt. Ik kan je datamodel alleen niet helemaal volgen; waar sla je de relatie tussen leveranciers en stoelen en de relatie tussen leveranciers en bekleding op?
  • @annie Stoelen heeft een kolom: leverancier_id Bekleding heeft ook een kolom: leverancier_id @de oplossing Nu is het zo dat er meerdere (maar niet allemaal) bekledingtypen mogelijk zijn voor een bepaalde stoel. Deze relaties zijn in de tabel stoel_bekleding opgeslagen. Wat deed ik nu fout? stel resultset 1 was: ( 1 | 2 | 3 | 4 ) dit waren alle bekleding_id's van een bepaalde leverancier, maar ik wil alleen de bekleding_id's die nog niet gekoppeld zijn aan een stoel, maar evt wel gekoppeld kunnen worden. Nu wilde ik op de hierboven beschreven manier middels een loop controleren of "1" voorkwam in resultset 2. stel resultset 2: ( 1 | 4 ). Dus bij controle van 1 krijg ik 1 == 1, dus true die bestaat al, waar ik niet aan had gedacht is dat als ik van resultset 1 ga controleren 2 == 1 false krijg. en 1 uit resultset 2 alsnog ge-echo-ed wordt. Ik heb het nu op een andere manier gedaan,hier de oplossing : mocht er ooit nog iemand op een zelfde probleem stuitten.... [code:1:415a1f99fb] $rs = $myDBC->getData("SELECT bekleding_id, naam FROM bekleding WHERE leverancier_id = " . $_POST['leverancier']); $num = mysql_num_rows($rs); $bekleding = array(); for ($i=0;$i<$num;$i++) { $bekleding[$i] = mysql_result($rs,$i,'bekleding_id'); } $res = $myDBC->getData("SELECT bekleding_id FROM stoel_bekleding WHERE stoel_id = " . $_POST['stoel']); $numr = mysql_num_rows($res); for ($i=0;$i<$num;$i++) { for ($j=0;$j<$numr;$j++) { if ($bekleding[$i] == mysql_result($res,$j,'bekleding_id')) { $bekleding[$i] = ""; } } } for ($i=0;$i<$num;$i++) { if ($bekleding[$i] != "") { echo "<input type='checkbox' name='c" . $i . "'value='" . $bekleding[$i] . "'> " . mysql_result($rs,$i,'naam') . "<br>"; } } [/code:1:415a1f99fb]

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.