Avatar billede baronen20 Nybegynder
18. marts 2003 - 13:37 Der er 20 kommentarer og
1 løsning

Baglæns order by

Jeg har et felt med en dato, som der skal sorteres efter.

eks.: 18/03-2003

Normalt sorterer man jo fra venstre mod højre, kan det gøres omvendt?
Avatar billede terry Ekspert
18. marts 2003 - 13:38 #1
well the date (if it is a date field ) should sort by year month and day
Avatar billede hsg Nybegynder
18. marts 2003 - 13:39 #2
Hvis din dato ligger som en char felt ville jeg nok vende datoen inden den blev lagt ned i tabellen: 20030318
Hvis du bruger DATE som kolonne type så ligger datoen på ovennævnte format.
Man kan mig bekendt ikke lave den omvendte sortering, som du ønsker om.
Avatar billede terry Ekspert
18. marts 2003 - 13:40 #3
If it doesnt work then try ORDER BY format(TheDateField, "yyyy-mm-dd")
Avatar billede ghazaleh Nybegynder
18. marts 2003 - 13:41 #4
Jeg plejer at tilføje 2 felter når jeg gemmer en dato.
Den ene bliver gemt i det format som den skal vises i fx. som ovenover, og i det andet felt gemmer jeg datoen i formatet YYYYMMDD, og så sorterer jeg på det felt
Avatar billede hsg Nybegynder
18. marts 2003 - 13:43 #5
format...så blev man så klog :-)
Avatar billede morw Nybegynder
18. marts 2003 - 14:04 #6
respekten> 2 felter? Why? Unødvendigt
Avatar billede ghazaleh Nybegynder
18. marts 2003 - 14:06 #7
for at øge performance
Avatar billede fsconsult.dk Nybegynder
18. marts 2003 - 14:08 #8
2 felter mindsker performance istedet og øger inkonsistens i databasen.

Hvis man istedet benytter et DATE felt, har man både mulighed for formatering og sortering på de formater man har brug for på udtrækstidspunktet fremfor design tidspunktet.

Hvis du ønsker at sorterer på måneden eller dagen, skal du jo benytte 4 felter istedet med den metode.
Avatar billede hsg Nybegynder
18. marts 2003 - 14:09 #9
respekten:
Så istedet for en translate af dato formatet i din php kode lader du databasen
arbejde og overføre lidt ekstra data?
Ved godt det er små mængder, men er det målbart?
Avatar billede jpvj Nybegynder
18. marts 2003 - 14:12 #10
fsconsult> "..og øger inkonsistens i databasen." Det er forkert. Det øger redundancen.

JP
Avatar billede fsconsult.dk Nybegynder
18. marts 2003 - 14:17 #11
jpvj > det øger begge dele. hvis du gemmer den samme oplysning i to forskellige felter, opnår du dels redundans da oplysningerne er der flere gange, men du opnår også inkonsistens af samme grund, idet du opnår en mulighed for at begge felter ikke opdateres synkront, og at dine data dermed bliver inkonsistente
Avatar billede morw Nybegynder
18. marts 2003 - 14:21 #12
Det øger vel også inkonsistensen i og med at flere felter jo ikke nødvendigvis stemmer overens med hinanden.
Avatar billede ghazaleh Nybegynder
18. marts 2003 - 14:25 #13
hmmm der er vist enighed om at metoden ikke er så god...

Jeg arbejder normalt med DB2 hvor vi bruger virtuelle felter, og den metode har jeg efterlignet ved at oprette to fysiske felter i MySql (Jeg ved godt at det ikke bliver det samme resultat), og jeg vil godt give jer ret i, at man kan få problemer, hvis man ikke tænker sig om.

Jeg har dog brugt metoden på 3 mindre mysql databaser, og jeg har rent praktisk ikke oplevet nogle problemer med det
Avatar billede morw Nybegynder
18. marts 2003 - 14:25 #14
Nææ en god DATE_FORMAT(date,format) ved man hvad er. Desuden kan man bruge YEAR(date), MONTH(date) o.s.v.
Avatar billede hsg Nybegynder
18. marts 2003 - 18:56 #15
respekten: nu er jeg nysgerrig - hvad er virtuelle felter ifm DB2 ?
Avatar billede ghazaleh Nybegynder
19. marts 2003 - 08:07 #16
Når man opretter en fil i DB2 og fx har et dato-felt i filen, så gemmer man altid dato-feltet i et format, der kan sorteres udfra.

For at få vist datoen rigtigt på skærmen knytter man et virtuelt felt til det fysiske felt (Dvs. et felt "der ikke eksisterer"), som henviser til det rigtige felt, men som viser et andet format.
Avatar billede hsg Nybegynder
19. marts 2003 - 08:46 #17
respekten: Kan du give et eksempel på hvordan du gør ?
Avatar billede ghazaleh Nybegynder
19. marts 2003 - 09:10 #18
Det er svært at forklare mere end jeg gjorde før, medmindre at du har arbejdet på en AS/400? Men jeg kan da prøve:

altså man opretter en fil (Begrebet forvirrer måske lidt, men det svarer til en tabel i mysql). Når denne fil er oprettet, så går man ind i en menu-oversigt over alle sine filer. Her kan man vælge at tilføje et virtuelt felt til en bestemt fil (Et virtuelt felt behøves ikke at handle om datoer). Oprettelsen af et virtuelt felt ligner meget oprettelsen af fysiske felter, men man skal samtidig henvise til et fysisk felt, for man kan ikke gemme data i dette felt, da det "ikke eksisterer".

Så man kan faktisk sige at det er en datokonvertering, som databasen laver, så man slipper for at lave det i programmeringen nøjagtig på samme måde som MySql også kan i følge indlæggende ovenover - men det må jeg vist se at få mig lært

Jeg ved snart ikke hvordan jeg skal forklare det bedre. Jeg har kun arbejdet på AS/400 i et års tid, så jeg har ikke en dybdegående viden om emnet.
Avatar billede hsg Nybegynder
19. marts 2003 - 09:24 #19
Så vi snakker mere om et view end en tabel?
Du har jo funktionerne til at hente år, måned osv ud både på DB2/400
og de andre afarter af DB2
Avatar billede ghazaleh Nybegynder
19. marts 2003 - 09:35 #20
Et view - ja det kan man godt sige.

Ja, man kan hente alle former for datoer ud, men dette bruger man så, når man vil hente en dato ud i et andet format end det, som det er lagret i.

Men ved administrationen af filen, der ligner det visuelt meget et ekstra felt i filen, og man kan også arbejde med det virtuelle felt i programmeringen.
Avatar billede hsg Nybegynder
19. marts 2003 - 09:37 #21
ok, takker for info
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
Computerworld tilbyder specialiserede kurser i database-management

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