Avatar billede sesam Nybegynder
05. februar 2003 - 12:11 Der er 18 kommentarer og
1 løsning

SQL sortering

Jeg har i min database nogle poster med tilknyttede ugedage fx.

mandag
onsdag
lørdag
søndag

Jeg vil gerne skrive posterne ud efter dagene. Altså:
Mandag
tirsdag
onsdag
torsdag
osv...

Kan man det og hvordan?
Avatar billede abpdk Nybegynder
05. februar 2003 - 12:13 #1
Prøv at slutte din SQL-forespørgsel af med "ORDER BY dato".
Avatar billede abpdk Nybegynder
05. februar 2003 - 12:14 #2
Derudover kan du tilføje "ASC" og "DESC" alt efter hvilken "vej" du vil ha' det sorteret. Eks. "SELECT * FROM table ORDER BY dato ASC"
Avatar billede sesam Nybegynder
05. februar 2003 - 12:16 #3
Ja det ved jeg godt men F kommer fx. før M så derfor vil fredag blive skrevet ud før mandag ik ,0)
Avatar billede sesam Nybegynder
05. februar 2003 - 12:23 #4
anyone???
Avatar billede stig3 Mester
05. februar 2003 - 12:27 #5
Jeg foreslår at du "pakker" dit recordset ud i 7 arrays - et for hver ugedag.

Man kan ved weekday-funktionen finde ud af hvilken ugedag en given dato er:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vsfctweekday.asp
Avatar billede e.oersted Nybegynder
05. februar 2003 - 12:27 #6
Du kan f.eks. anvende DECODE:

decode(UGEDAG,
'mandag','1',
'tirsdag','2',
'onsdag','3',
'torsdag','4',
....
....
'ingen af førnævnte')

.. og så lave order by på resultatet
Avatar billede stig3 Mester
05. februar 2003 - 12:29 #7
ups - forkert kategori.....
Avatar billede sesam Nybegynder
05. februar 2003 - 12:36 #8
e.oersted >> Kan du forklare lidt mere hvad jeg skal gøre?
Avatar billede e.oersted Nybegynder
05. februar 2003 - 12:41 #9
select UGEDAG from DinTabel
order by decode(UGEDAG,'mandag','1','tirsdag','2','onsdag','3',
'torsdag','4','fredag','5','lørdag,'6','søndag,'7','99')
Avatar billede sesam Nybegynder
05. februar 2003 - 12:43 #10
Hvad er 99
Avatar billede e.oersted Nybegynder
05. februar 2003 - 12:46 #11
Den sidste værdi returneres hvis indholdet i feltet UGEDAG ikke findes i din liste 'mandag','tirsdag',....'søndag'
Så hvis du i feltet UGEDAG har en række med 'monday' vil den blive sorteret med '99'
Avatar billede jepzz Nybegynder
05. februar 2003 - 12:47 #12
DECODE(expr, value1 [, return1, value2, return2....,] default )
Avatar billede delwin Nybegynder
05. februar 2003 - 21:47 #13
e.oersted << Najse nok.. man lærer noget hver dag :-)
Avatar billede e.oersted Nybegynder
06. februar 2003 - 11:29 #14
Kom lige i tanke om, at der kan være forskel på functions mellem forskellige databaser.
Mit oprindelige svar vil virke hvis du anvender en Oracle database( som jeg gør til daglig).
Da du muligvis anvender MySQL skulle du prøve FIND_IN_SET i stedet for:
FIND_IN_SET(str,strlist)
Returns a value 1 to N if the string str is in the list strlist consisting of N substrings. A string list is a string composed of substrings separated by `,' characters. If the first argument is a constant string and the second is a column of type SET, the FIND_IN_SET() function is optimised to use bit arithmetic! Returns 0 if str is not in strlist or if strlist is the empty string. Returns NULL if either argument is NULL. This function will not work properly if the first argument contains a `,':
mysql> SELECT FIND_IN_SET('b','a,b,c,d');
        -> 2
Avatar billede sesam Nybegynder
06. februar 2003 - 12:39 #15
Nu har jeg leget lidt med det men kan ikke finde ud af hvad jeg skal ???
Avatar billede avlund Nybegynder
06. februar 2003 - 12:43 #16
Altså...

er der en grund til at du ikke har sat tallene 1-7 ind i tabellen i stedet for ugedagene, og derefter joinet den med en ny tabel der lænker 1-7 med ugedagenes navne? Det andet lyder særdeles unormaliseret.
Avatar billede e.oersted Nybegynder
06. februar 2003 - 12:56 #17
Hvilken database anvender du?
Hvad hedder din tabel?
Hvordan er din tabel defineret (kolonne-navne, type)?

- hvis du gav lidt flere oplysninger vil det tage et nano-sekund at hjælpe dig.
Avatar billede e.oersted Nybegynder
06. februar 2003 - 13:37 #18
Sidste forsøg. Jeg har nu "konverteret" Oracles DECODE function til ANSI SQL, så må vi se om det hjælper dig.

select UGEDAG from tabelX
order by CASE
          WHEN LOWER(UGEDAG)='mandag' THEN '1'
          WHEN LOWER(UGEDAG)='tirsdag' THEN '2'
          WHEN LOWER(UGEDAG)='onsdag' THEN '3'
          WHEN LOWER(UGEDAG)='torsdag' THEN '4'
          WHEN LOWER(UGEDAG)='fredag' THEN '5'
          WHEN LOWER(UGEDAG)='lørdag' THEN '6'
          WHEN LOWER(UGEDAG)='søndag' THEN '7'
          ELSE '9'
        END

PS.
Jeg har ikke adgang til en MySQL database, så jeg kan ikke teste ovennævnte. Hvis MySQL ikke bryder sig om CASE i "order by" clauses, så prøv at lade det være en del af din select-list.
Avatar billede sesam Nybegynder
08. februar 2003 - 14:20 #19
Tusind tak for hjælpen det spiller bare ;0)
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