Avatar billede stigc Nybegynder
17. juni 2002 - 20:41 Der er 18 kommentarer og
3 løsninger

Kan man denne "order by "?

Jeg ønsker at sortere en tabel efter en liste.


f.eks:

select * from tabel order by id (1,2,3,6,9)


Så skal, hvis disse id findes, komme ud i angivet rækkefølge. Er det noget jeg har drømt, eller kan det faktisk lade sig gøre? (hvis det er noget jeg har drømt, må jeg vist heller holde lidt sommerfierie!)

Avatar billede brideonline.dk Nybegynder
17. juni 2002 - 20:48 #1
select * from tabel order by id asc (1234567 osv.)
select * from tabel order by id desc (7654321 osv.)

Så det kan man godt ja :)
Avatar billede rune_c Nybegynder
17. juni 2002 - 20:50 #2
Avatar billede brideonline.dk Nybegynder
17. juni 2002 - 20:53 #3
do'h - Så ikke lige at det var ASP, men man kan godt! - Måske ikke lige præcis på den måde som jeg skrev der, da det er til PHP ...
Avatar billede rune_c Nybegynder
17. juni 2002 - 20:55 #4
brideonline.dk>> Hvad pratter du om?? SQL er et sprog og har INTET med ASP, PHP eller andre scripting-sprog(!) så selvfølgelig er det det samme!
Avatar billede stigc Nybegynder
17. juni 2002 - 21:18 #5
rune_c >> Jeg er ikke helt med på det, som står hos Mircosoft. Er dusikke på det er hvad jeg har brug for?

Jeg har desværre ikke lige en SQL server jeg kan teste på lige nu. Hvordan ville en SQL ser ud, hvor man sorterer efter feltet "id" med listen : {2,7,4,89,1} ?
Avatar billede hansk Nybegynder
17. juni 2002 - 21:39 #6
Du kan sortere ascending eller descending.
Hvis du vil sortere på en anden måde kan du gøre det ved at selv lægge sorteringskriterie ind som en tabel eller som en beregning.
Endvidere kan du ændre sorteringen når du selekter data, men kun hvis du har helt klart for dig hvordan det skal foregå. Dette kan du gøre via unions. Hvis du skriver lidt mere om hvordan det skal være skal jeg prøve at hjælpe dig videre.
Avatar billede rune_c Nybegynder
17. juni 2002 - 21:46 #7
jeg tror at han vil har en tabel med id'erne: 1,2,3,4,5,6,7,8,9,10....10001. Han laver så et udtræk hvor han vile have de poster med id'et 1, 2, 4, 7 eller 89 ud i rækkefølgen 2,7,4,89 og sidst 1.
Avatar billede stigc Nybegynder
17. juni 2002 - 21:59 #8
tabelen ser f.eks. sådan her ud:

id    name
1    hans
2    peter
3    jens
4    line
5    tina

select name from table order by id {1,2,5,4,3)

så skal jeg få data i denne rækkefølge:

hans
peter
tina
line
jens
Avatar billede hansk Nybegynder
17. juni 2002 - 22:29 #9
Godt, hvis du ikke har en direkte formel til at sortere med kan du gøre det således: (den meget manuelle måde)

select 1 as sortering, id, name from tabel
where id in (1,2,5)
union
select 2 as sortering, id, name from tabel
where id in (4)
union
select 3 as sortering, id, name from tabel
where id in (3)
order by 1,2
Avatar billede stigc Nybegynder
17. juni 2002 - 22:33 #10
Desværre den holder ikke. Jeg har brug for at sortere for at optimere et stort VIEW, så det du forslår er ikke så godt!

Er der nogen der ved om man kan det mit oprindelige spørgmål gik på?
Avatar billede hansk Nybegynder
17. juni 2002 - 22:46 #11
Du kan måske oprette en tabel hvor du angiver sorteringskriteriet?
Avatar billede ocp Nybegynder
17. juni 2002 - 23:34 #12
Der MÅ da være en eller anden form for kriterie du kan bruge som sorteringsparameter?
Avatar billede proaccess Nybegynder
18. juni 2002 - 08:16 #13
Du må afgøre HVAD det er, som gør at du vil have 1 efter 89...

hvis det er data i et andet felt, så tag dog det felt med i sort:

  ORDER BY Fornavn, ID

eller, hvis det ALTID er sådan at 1 skal komme mellem 89 og 90, og lignende indsætninger... 3,7,5,6,4,2,1

Så må du opbygge en sort-tabel:
ID  SORT
  1  7
  2  6
  3  1
  4  5
  5  3
  6  4
  7  2

Så kan du bruge denne i en JOIN...

SELECT tabel.* FROM tabel INNER JOIN sort ON tabel.ID=sort.id ORDER BY sort.sort
Avatar billede stigc Nybegynder
18. juni 2002 - 09:11 #14
Det er netop for ikke at joine for mange tabeller. Jeg har allerede rækkefølgen liggende i en streng, og ville udnytte dette.
Avatar billede tmceu Praktikant
18. juni 2002 - 09:14 #15
Så har du næsten selv svaret på dit spørgsmål :-) Du kan ikke anvende standard ORDER BY, du kan ikke anvende UNION (det ville også være et helvede) og du kan ikke anvende en sorteringstabel i et JOIN.

Hvad tror du så selv nu :-)
Avatar billede proaccess Nybegynder
18. juni 2002 - 09:25 #16
>stigc: Hvordan har du SELV fundet den rigtige rækkefølge ??? - Kan det tilsvarende ikke opstilles i std. regler ?

Eks. Jeg vil sortere efter 3. bogstav i fornavn og derefter efter 2. bogstav i efternavn...

  ORDER BY SubString([Fornavn], 3, 1), SubString([Efternavn], 2, 1)
Avatar billede proaccess Nybegynder
18. juni 2002 - 09:40 #17
Som sidste udgang, kan du registerere Sortéring i din oprindelige tabel (som en selvstændig kolonne)...

noget a'la en form for prioriteret liste med A, B og C-kunder...

og så bruge denne kolonne til at sortere efter...
Avatar billede proaccess Nybegynder
18. juni 2002 - 09:41 #18
MEN NEJ - Du kan ikke sortere efter en streng bestående at tal !
Avatar billede genvej Nybegynder
18. juni 2002 - 14:53 #19
skulle være ligetil.....
select name from tabel where id in(1,2,3,6,9)order by id
Avatar billede genvej Nybegynder
18. juni 2002 - 14:56 #20
sorry... misforstod :-(
Avatar billede proaccess Nybegynder
23. juni 2002 - 09:13 #21
Kan vi få lukket dette...  Jeg går ud fra at du HAR fået løst dit problem, da det snart er et par dage siden...
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