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:
  1. while ($egy_fokat=mysql_fetch_array($fokategoriak)){  
  2.   print $egy_fokat['ss_kateg_nev']."<br />";  
  3.   while($egy_alkat=mysql_fetch_array($alkategoriak)){  
  4.     if($egy_alkat['alkateg_fo']==$egy_fokat['id']){  
  5.     print $egy_alkat['alkateg_nev']."<br />";  
  6.     }  
  7.   }  
  8. }  
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:
  1. <?  
  2. $results = array();  
  3. while($egy_alkat=mysql_fetch_array($alkategoriak)){  
  4.  $results[] = $egy_alkat;  
  5. }  
  6. while ($egy_fokat=mysql_fetch_array($fokategoriak)){  
  7.  echo $egy_fokat['ss_kateg_nev']."<br />";  
  8.  foreach ($results as $result) {  
  9.   if ($result["alkateg_fo"] == $egy_fokat["id"])  
  10.    echo $result["nev"];  
  11.  }  
  12. }  
  13. ?>  
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!!!