ugrás a tartalomhoz

Két while(mysql_fetch_array) egymásba ágyazása

rrroka · 2007. Jan. 25. (Cs), 19.37
sziasztok!

van két msql resultom főkategóriák és alkategóriák. ezekből tömböt csinálok és kiírnám őket szépen sorban, amolyan menü szerűen, pl:
-főkategória_1
- alkateg_1
- alkateg_2
-főkateg_2
- alkateg_3
- alkateg_3
stb...
a két tömb között a kapcsoló, h az alkateg 'alketeg_fo' mezője tartalmazza a főkategória IDjét amihez tartozik.

A következő ciklusokkal próbálkoztam:
while ($egy_fokat=mysql_fetch_array($fokategoriak)){
  print $egy_fokat['ss_kateg_nev']."<br />";
  while($egy_alkat=mysql_fetch_array($alkategoriak)){
    if($egy_alkat['alkateg_fo']==$egy_fokat['id']){
	print $egy_alkat['alkateg_nev']."<br />";
    }
  }
}
az eredmény vmiért az, h csak az első főkategóriánál írja ki az alkategóriákat, a többinél nem.
Nem nagyon értem h miért történik.
vmki, vmi ötlet?

Köszi!
rrróka
 
1

Akkormost

krey · 2007. Jan. 25. (Cs), 20.35
Nem igazán értem a logikád. Nézzük csak hogy mit akarsz csinálni:
Van 2 result $fokategoriak és $alkategoriak. Ez már alapból nemtúllogikus, ha engem kérdezel, elég lenne egy result, és lenne minden kategóriának egy parent tulajdonsága. Aminek 0-a parentje az főkategória. De ehhez más szerkezet kéne...
Tehát a jelenség amit kapsz nagyon egyszerű:
Amikor először csinálja az külső while-t, belép a belsőbe, kiszedi az összes result-ot és a 2. menetnél már mindig false lesz a mysql_fetch_array($alkategoriak).
A problémád megoldása kicsit bonyolult, most hirtelen csak az jutott eszembe, hogy gyűjtsd tömbbe az alkategóriákat és aztán pörgesd végig azt a tömböt foreach-csel. Valahogy így:
<?
$results = array();
while($egy_alkat=mysql_fetch_array($alkategoriak)){
 $results[] = $egy_alkat;
}
while ($egy_fokat=mysql_fetch_array($fokategoriak)){
 echo $egy_fokat['ss_kateg_nev']."<br />";
 foreach ($results as $result) {
  if ($result["alkateg_fo"] == $egy_fokat["id"])
   echo $result["nev"];
 }
}
?>
Lehet, h ez így nem működik és biztos van gyorsabb módszer, de remélem érted. 100%-osan teszteletlen, tele lehet parse error-okkal, de húznom kell tanulni, holnap vizsgázom.

üdv. krey
2

müxik

rrroka · 2007. Jan. 25. (Cs), 21.19
Szia! Köszi! ez így megy szépen!

a másik megoldásom az lett volna, h a főkateg kiírása után csinálok mégegy lekérést WHERE-rel, dez az ugye bazira megterhelné a szervert.

ez így teszik, köszönöm szépen! régóta szenvedtem vele, ebből látszik milyen káros ha az ember leragad egy megoldásnál...

köszi!!!