A fetch_assoc és fetch_* társai egyszerre egy sort olvasnak be, tehát ha a sorrenden szeretnél változtatni valahogy, akkor vagy az adatbázis-lekérdezésedet kellene módosítani, hogy a PHP a megfelelő sorrendben kapja a recordsetet, vagy pedig be kell olvasni az összes sort egy PHP tömbbe, majd a PHP-ban végrehajtani a rendezést. A fetch_assoc egy rekordot tömbbe olvas be, de ez csak egy asszociatív tömb, aminek az elemei az aktuálisan beolvasott egyetlen rekord mezőit tartalmazzák.
Ha az adatbázis-lekérdezésnél nincsen rendezés-klauza (ORDER BY), akkor a kapott sorrend nem garantált. Sok esetben egyszerűen abban a sorrendben kapod meg a rekordokat, ahogy fizikailag egymás után helyezkednek el a háttértáron.
Esetben, ha jól értem, célszerű lenne felvenni egy plusz mezőt az adattáblába, amely eltárolná a feltöltés dátumát, és erre már lehetne növekvő vagy csökkenő sorrendű lekérdezést végrehajtani. Mysql-ben ezt egyszerű megoldani (TIMESTAMP DEFAULT CURRENT_TIME()), és ezt a mezőt a Mysql automatikusan be fogja állítani az aktuális időre a rekord létrejöttének pillanatában, a PHP kódban a rekordbeszúrásnál ezzel a mezővel nem is kell törődni.
Ha ez valamiért nem járható út, de a táblának van egy autoinkrement kulcsmezője, akkor arra is lehet rendezést végrehajtani.
HA ez sem jó valamiért, akkor csak az az út marad, hogy beolvasod az összes rekordot egy tömbbe, majd megfordítod az elemek sorrendjét (tán array_reverse(), vagy valami hasonló), majd végigmenve a tömbön, elvégzed a kiírást.
x gon' give it to ya