Du får det förväntade resultatet. Om du har resultatuppsättningen a,b,c,d , du börjar med a som är en överordnad kategori, så den spolas tillbaka till början av setet och itererar genom a,b,c,d igen som underkategorier. Nu är du i slutet av setet så båda slingorna kommer att avslutas eftersom det inte finns mer data.
Vad du antagligen vill göra är att först läsa in all data i en PHP-array, sedan iterera över det och bygga en sorts trädstruktur. Du kanske också kan bygga din trädstruktur direkt i mysql_fetch-loopen.
Beroende på vad du försöker uppnå finns det också bättre sätt att lagra din data. Det är värt att läsa om hur man lagrar träd och hierarkisk data i SQL. Kapslade set är förmodligen vad du vill ha.
En annan sak:använd inte mysql_fetch_array , använd mysql_fetch_assoc istället. Annars får du numeriska och associativa nycklar och en radmatris som innehåller dubbelt så mycket data som den borde.