Hvis dit felt er et varchar(16), og du sortere efter 'dato DESC' så skal data komme ud som:
31-03-2006 22:00 01-04-2006 22:00
Desc betyder nemlig at tingene skal sorteres i faldende orden, og den viste sortering er faktisk i faldende *alfabetisk* orden (tegnet '0' ligger før tegnet '9').
Stigende orden fås ved at sortere med 'dato ASC', men så får du bare nogle andre problemer senere; Med alfabetisk sortering kommer alle poster som starter med ”01” nemlig før alle poster som starter med ”31”:
Den eneste rigtige måde at gemme en dato-værdi, hvis man senere ønsker at kunne sortere korrekt på den, er at have feltet som et datetime-felt. Som en øget bonus fylder sådan et felt ovenikøbet mindre i databasen.
Men helt generelt gælder der altså at: Felttyper bør altid stemme overens med den type data man har i dem.
Synes godt om
Slettet bruger
01. april 2006 - 08:27#4
Hvis dine datoer er formateret som du viser og de er gemt i varchar felter så kan du ikke sorterer dem korrekt. Du bliver nød til at få dem konverteret til datetime typer.
En ORDER BY med en beregning, som fx STR_TO_DATE eller CDate, er langsom, og alt for langsom hvis du har store mængder af data.
Du skal lave dit felt om til den rigtige type, og bruge STR_TO_DATE eller tilsvarende til en engangskonvertering, og så fx lade din ASP konvertere til og fra den visning brugeren skal se.
Jeg har prøvet tusinde gange, jeg ved ikke hvad jeg skal gøre. den fejler med dette hver gang.
[MySQL][ODBC 3.51 Driver][mysqld-4.0.17-nt]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(dato, GET_FORMAT(DATETIME,'USA')) DESC LIMIT 0,15' at line 1
Det kan man nu se ud af den kode han viser. Ikke mellemrum mellem STR_TO_DATE og ( - de skal stå klods op af hinanden. Men det er fortsat en dum idé at lave beregninger i forbindelse med ORDER BY. Den eneste rigtige løsning er at vælge de rigtige felttyper. Men hvad ved jeg om det ... :)
[MySQL][ODBC 3.51 Driver][mysqld-4.0.17-nt]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(dato, GET_FORMAT(DATETIME,'USA')) DESC LIMIT 0,15' at line 1
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.