Avatar billede delphinarious Nybegynder
20. juni 2003 - 14:33 Der er 12 kommentarer og
2 løsninger

Sortering efter dato.

Hej.

Jeg har en database som indeholder en masse poster. Fælles for dem alle er at de har en dato, som er angivet som xx/xx - xxxx.

De ser fx. sådan her ud:

01/08 - 2003
06/06 - 2003
20/03 - 2004

Nu vil jeg altså gerne have at udtrækket fra databasen bliver sorteret efter disse datoer. Desværre forholder det sig sådan, at hvis jeg blot bruger "Order By Stopdato", så bliver rækkefølgen helt hen i vejret. Jeg skal på en eller anden måde have angivet at den først skal kigge på årstal, så på måneder og til sidst på datoen, i stedet for omvendt. Hvordan får jeg den til at læse baglæns, eller hvad det nu er jeg skal?
Avatar billede sone Nybegynder
20. juni 2003 - 14:35 #1
Er dit felt et datofelt eller en streng?
Avatar billede delphinarious Nybegynder
20. juni 2003 - 14:35 #2
Det er en almindelig tekst-streng..
Avatar billede sone Nybegynder
20. juni 2003 - 14:36 #3
Så er du på ski.....
Hvilken DB bruger du?
Avatar billede Slettet bruger
20. juni 2003 - 14:37 #4
darkey>>Der er kun en farbar vej.
Du skal ændre dit format til f.eks.
2004-03-30 og så bruge sort på det...
Avatar billede postndk Nybegynder
20. juni 2003 - 14:37 #5
tjaa, når jeg gemmer data i en mysql database, bruger jeg somregel et timestamp, som er angivet ved at det er antal sek. fra (mener det er 1-1-1970),

og hvis du har et timestamp der hedder 10234134234 så er det : 19-1-2038 04:14:07

og det er meget nemmere at sortere i ...
Avatar billede sone Nybegynder
20. juni 2003 - 14:39 #6
Hvis du er "heldig", så kan du bruge en DB-funktion til at konvertere fra text til dato:
SELECT * FROM (SELECT date_function(dato_txt_felt) as new_date FROM tabel) ORDER BY new_date
Avatar billede ahv Nybegynder
20. juni 2003 - 14:39 #7
darkey ->
Du skal som regin siger ændre dit felt til f.eks. date, så kan du også nemmere sætte dagsdato osv. ind, dette kan du også sortere på. For at få den danske dato ud gør du blot følgende ->

SELECT DATE_FORMAT(datefelt, '%d-%m-%Y %H:%i:%s') AS date FROM tabel order by datefelt
Avatar billede delphinarious Nybegynder
20. juni 2003 - 14:39 #8
Databasen er MySQL..?

Jeg kan godt ændre formatet til xxxx - xx-xx, men jeg vil jo gerne have den til at udskrive det som xx/xx - xxxx i browseren - Kan det stadig lade sig gøre, så?
Avatar billede ahv Nybegynder
20. juni 2003 - 14:40 #9
SELECT DATE_FORMAT(datefelt, '%d/%m - %Y') AS date FROM tabel order by datefelt
Avatar billede sone Nybegynder
20. juni 2003 - 14:40 #10
Så vil jeg vælge at gemme sekunder siden 1970 - det som time() giver.
Avatar billede ahv Nybegynder
20. juni 2003 - 14:40 #11
Hvor datefelt er navnet på feltet med datoen.
Avatar billede Slettet bruger
20. juni 2003 - 14:42 #12
som postndk og sone skriver så brug time... der er en lang række fordele i dette...
Når du skal have udskrevet datoen i browseren kan du bruge strftime() og date() til at skrive lige akkurat det dato format du ønsker!
Avatar billede ahv Nybegynder
20. juni 2003 - 14:42 #13
Lille eksempel ->

$query = mysql_query("SELECT DATE_FORMAT(datefelt, '%d/%m - %Y') AS date FROM tabel ORDER BY datefelt");
while ($row = mysql_fetch_array($query)) {
echo $row['date'];
}
Avatar billede delphinarious Nybegynder
20. juni 2003 - 14:45 #14
Ja, ok. Det lader til at gå.
Så blev jeg også klogere i dag. :-)

Tak for hjælpen. :-)
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