array_multisort()
Sziasztok!
Megpróbálok érhető lenni..de így se lesz könnyű megérteni..:) pedig nem bonyolult
Röviden: Van egy táblám, az egyik oszlopban, időpontok vannak (feltöltésük ideje)...és időrend szerint szeretném sorba rakni a sorokat... -eddig egyszerű, ugye? :) -
Találtam: A php.net-en egy oldalt amin a array_multisort függvénnyel pont az én problémámat oldják meg, (nem nagyon értettem)
pontosan ez volt rajta:
"Van egy tömbünk a sorokról, de a array_multisort() oszlopokból álló tömböt vár, ezért a következő kódot használjuk, hogy megkapjuk az oszlopokat, majd elvégezzük a rendezést.
<?php
// Oszlopok előállítása
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
// Rendezzük volume szerint csökkenőleg, majd edition szerint növekvőleg.
// A $data tömb az utolsó paraméter, hogy a közös kulcs alapján rendezzen.
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?> "
Na, most az én lekérdezésem így néz ki (csak a lényeget nézd, nem kell foglalkozni a nem deklarált változókkal..)
$query = "SELECT id, cat, title, uptime
FROM akarmi ";
$pagingQuery = "LIMIT $offset, $rowsPerPage";
$result = mysql_query($query . $pagingQuery);
while(list($id, $name, $address, $age) = mysql_fetch_array($result))
{
echo "blabla".$name."blablaasdfasdf ";
}
Ez így nekem működik, de ugyebár még nem rakja sorba... (az uptime oszlop szerint szeretném rendezni csökkenő sorrendeben) Mivel nem vagyok valami penge a php függvényeg egymásba ágyazásával...
nem tudom, hogy mit kezdjek ezzel a foreach-al hova rakjam? a while elé? -de hogyan? a while-ba az hogy nézne már ki?..vagy esetleg a while után..? - de annak meg mi értelme lenni, hogy megjelenítés után rakja sorba...Meg az is zavar, hogy LIMIT van a lekérdezésben...és nem szeretném, ha az első 50 sort rendezetlenül lekérdezné, majd csak azokat rakná sorba...
(vagy lehet, hogy van erre a célra megfelelőbb függvény csak nem tudok róla)
Kérlek ne csak egy linkkel válaszolj (a legjobb az lenne, ha leírnád a jó kódot)
Köszi
ui.:elnézést mindenkitől, nem akartam ekkora helyet elfoglalni a képernyőn, csak hosszúra sikeredett...
■ Megpróbálok érhető lenni..de így se lesz könnyű megérteni..:) pedig nem bonyolult
Röviden: Van egy táblám, az egyik oszlopban, időpontok vannak (feltöltésük ideje)...és időrend szerint szeretném sorba rakni a sorokat... -eddig egyszerű, ugye? :) -
Találtam: A php.net-en egy oldalt amin a array_multisort függvénnyel pont az én problémámat oldják meg, (nem nagyon értettem)
pontosan ez volt rajta:
"Van egy tömbünk a sorokról, de a array_multisort() oszlopokból álló tömböt vár, ezért a következő kódot használjuk, hogy megkapjuk az oszlopokat, majd elvégezzük a rendezést.
<?php
// Oszlopok előállítása
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
// Rendezzük volume szerint csökkenőleg, majd edition szerint növekvőleg.
// A $data tömb az utolsó paraméter, hogy a közös kulcs alapján rendezzen.
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?> "
Na, most az én lekérdezésem így néz ki (csak a lényeget nézd, nem kell foglalkozni a nem deklarált változókkal..)
$query = "SELECT id, cat, title, uptime
FROM akarmi ";
$pagingQuery = "LIMIT $offset, $rowsPerPage";
$result = mysql_query($query . $pagingQuery);
while(list($id, $name, $address, $age) = mysql_fetch_array($result))
{
echo "blabla".$name."blablaasdfasdf ";
}
Ez így nekem működik, de ugyebár még nem rakja sorba... (az uptime oszlop szerint szeretném rendezni csökkenő sorrendeben) Mivel nem vagyok valami penge a php függvényeg egymásba ágyazásával...
nem tudom, hogy mit kezdjek ezzel a foreach-al hova rakjam? a while elé? -de hogyan? a while-ba az hogy nézne már ki?..vagy esetleg a while után..? - de annak meg mi értelme lenni, hogy megjelenítés után rakja sorba...Meg az is zavar, hogy LIMIT van a lekérdezésben...és nem szeretném, ha az első 50 sort rendezetlenül lekérdezné, majd csak azokat rakná sorba...
(vagy lehet, hogy van erre a célra megfelelőbb függvény csak nem tudok róla)
Kérlek ne csak egy linkkel válaszolj (a legjobb az lenne, ha leírnád a jó kódot)
Köszi
ui.:elnézést mindenkitől, nem akartam ekkora helyet elfoglalni a képernyőn, csak hosszúra sikeredett...
2 variáció
2 féle módon is meg tudnám oldani a problémádat:
1. Ahogyan Te szeretnéd: szedd le LIMIT nélkül az összes adatot, de a kiíratás (echo) helyett tedd egy tömbbe az eredményeket, valahogy így:
Kevésbé hatékony megoldás, hacsak nem tudod a rendezett tömbödet cache-elni valahogy (enélkül minden körben minden adatot le kell húznod az adatbázisból és még rendezni is kell).
2. Használd az ORDER BY sql kifejezést! Együttműködik a LIMIT-tel is, tisztább, szárazabb érzés.
Valakinek jobb ötlete?
Norbi
hi
Itt van...kicsit összetettebb...Akár benne van az order by akár nincs, UGYAN AZ az eredmény, akár DESC-el akár ASC-el és hibaüzenetet NEM kapok !
Elírás?
Szóval szerintem így