Avatar billede Slettet bruger
03. marts 2009 - 11:38 Der er 9 kommentarer og
1 løsning

Sort by date - men med limit

Hej,

Jeg har en række poster i min database - hver har en dato tilknyttet. Jeg vil gerne sortere dem således, at datoen er stigende - MEN samtidig vil jeg gerne smide en limit på.

$query = mysql_query("SELECT *, DATE_FORMAT(date, '%d-%m%-%Y') AS date, date as sortdate FROM ... ORDER BY sortdate asc");

Hvis jeg nu smider "limit 3" ind i enden af ovenstående SQL, så viser den jo de 3 FØRSTE datoer (sorteret med den ældste først) - MEN - jeg vil gerne have de 3 SIDSTE datoer (stadigvæk sorteret med den ældste først).

Hvordan fikses den? :-)
Avatar billede mstorgaard Praktikant
03. marts 2009 - 11:49 #1
Du fanger de 3 sidste med DESC, kyler dem i et array, og sorterer dem igen?
Avatar billede Slettet bruger
03. marts 2009 - 11:54 #2
Har du mod på at vise hvordan? :-)
Avatar billede mstorgaard Praktikant
03. marts 2009 - 12:33 #3
<?php
$query = mysql_query("SELECT *, DATE_FORMAT(date, '%d-%m%-%Y') AS date, date as sortdate FROM ... ORDER BY sortdate DESC");
$i = 1;
while($row = mysql_fetch_array($query)) {
  $array[$i]['date'] = $row['date'];
  $array[$i]['sortdate'] = $row['sortdate']
  $i++;
}
sort($array);
foreach($array AS $row) {
  //output
}
?>

//utestet, men noget i den retning
Avatar billede Slettet bruger
03. marts 2009 - 17:20 #4
Hmm - er det ikke noget med at man kan smide 2 parametre ind i sort by?

Altså i stil med:

ORDER BY id desc,sortdate asc LIMIT 3
Avatar billede mstorgaard Praktikant
03. marts 2009 - 20:36 #5
Jeg kan forestille mig, at man kan sortere efter "niveau" 2 og derefter efter "niveau" 1, altså køre sort() to gange.
Avatar billede Slettet bruger
03. marts 2009 - 22:34 #6
Hmm, ja, jeg fatter faktisk ikke, at ORDER BY ikke virker:

ORDER BY id desc,sortdate asc LIMIT 3

giver de sidste 3 datoer - men viser nyeste dato først:
03-03-2009 / 24-02-2009 / 17-02-2009

Det SKULLE være sådan:
17-02-2009 / 24-02-2009 / 03-03-2009


Og bytter jeg om:
ORDER BY sortdate asc,id desc LIMIT 3

ja, så er datoerne i den rigtige rækkefølge, MEN jeg får ikke de 3 seneste datoer, men de 3 første i tabellen:
08-11-2008 / 17-11-2008 / 27-11-2008

Troede ellers det var muligt...!? Hmm :-s
Avatar billede Slettet bruger
03. marts 2009 - 22:38 #7
Hmm ja, nu læser jeg, at det ikke helt er sådan "dobbelt-order-by" virker...
Avatar billede Slettet bruger
03. marts 2009 - 22:50 #8
Klarede den med en simpel array_reverse()

Tak for hjælpen, dog!


lukker...
Avatar billede mstorgaard Praktikant
03. marts 2009 - 22:59 #9
Så du brugte ikke arrays til at løse problemet?
Avatar billede Slettet bruger
03. marts 2009 - 23:14 #10
Joh, men kun dem der var i forvejen:

Fik datoerne ud i:
$xdataarray[] = $row['date'];

Og den kunne jeg reverse med:
$xdata = array_reverse($xdataarray);

(xdata osv. er fordi det er til at tegne grafer med)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester