Avatar billede warberg Juniormester
14. juni 2009 - 01:08 Der er 13 kommentarer og
1 løsning

Order by (order by)

Jeg forsøger at sortere pl.position / pl.nummer

Først "målmand", dernæst nummer indenfor målmand,
dernæst "forsvar", dernæst nummer indenfor forsvar,
dernæst "midtbane", dernæst nummer indenfor midtbane, osv 

Målmand nr 1
Målmand nr 16
Forsvar nr 4
Forsvar nr 8
Midtbane nr 6
Midtbane nr 17

ORDER BY pl.position='Målmand' desc, pl.position='Forsvar' desc...

Hvordan fletter jeg pl.nummer ind så den sorterer korrekt?
Avatar billede thesurfer Nybegynder
14. juni 2009 - 01:32 #1
Hvis det her er indholdet af dine feltet pl.position:

Målmand nr 1
Målmand nr 16
Forsvar nr 4
Forsvar nr 8
Midtbane nr 6
Midtbane nr 17

Så har du nok et problem..

Og for at det ikke skal være løgn, kommer "17" før "6", da det første tegn i "17" er "1", som er mindre end "6".. :-)



I stedet bør du nok dele værdien "Målmand nr 1" (og de andre) op i flere felter..

Opret en tabel "tblDefinition" med følgende felter:

id (autonummerering)
posid (tal)
posname (tekst)

Indtast følgende:

posid = 1
posname = Målmand

posid = 2
posname = Forsvar

posid = 3
posname = Midtbane

(osv)


Opret en tabel "tblPlayer" med følgende felter:

id (autonummerering)
posid (tal)
posnumber (tal)

(svare til "målmand nr 1")
posid = 1
posnumber = 1

(svare til "målmand nr 16")
posid = 1
posnumber = 16

(svare til "målmand nr 16")
posid = 2
posnumber = 4

(svare til "målmand nr 16")
posid = 2
posnumber = 8

(svare til "målmand nr 16")
posid = 3
posnumber = 6

(svare til "målmand nr 16")
posid = 3
posnumber = 17



Nu kan du sortere efter "posid" fra "tblDefinition" og "posnumber" fra "tblPlayer"


Sig til hvis du skal se noget SQL.. så ser jeg om jeg kan lave noget SQL til dig..
Avatar billede thesurfer Nybegynder
14. juni 2009 - 01:47 #2
Så prøvede jeg alligevel.. :-)

Jeg oprettede en database med ovenstående, og skrev denne SQL sætning:

select * from tblPlayer p left join tblDefinition d on p.posid = d.posid order by d.posid asc, p.posnumber asc

Resultatet blev:

p.id    p.posid    posnumber    d.id    d.posid    posname
2    1    1    1    1    Målmand
1    1    16    1    1    Målmand
4    2    4    2    2    Forsvar
3    2    8    2    2    Forsvar
5    3    6    3    3    Midtbane
6    3    17    3    3    Midtbane


Hvilket betyder:

Målmand nr 1
Målmand nr 16
Forsvar nr 4
Forsvar nr 8
Midtbane nr 6
Midtbane nr 17
Avatar billede thesurfer Nybegynder
14. juni 2009 - 01:50 #3
Nå.. Eksperten er ikke så glad for mit layout, så den ødelagde det.. :-)


Det felter du skal arbejde med, er:

posname (indeholder f.eks. "Målmand")

posnumber (indeholder f.eks. "16")
Avatar billede thesurfer Nybegynder
14. juni 2009 - 01:53 #4
Hehe.. jeg har lige lagt mærke til, at det gik lidt for hurtigt med copy/paste i mit første indlæg..

Der skulle naturligvis ikke have stået "(svare til "målmand nr 16")" ved de sidste 4 indtastninger under tabellen "tblPlayer", men deres respektive roller (forsvar/midbane samt nr)..
Avatar billede warberg Juniormester
14. juni 2009 - 10:34 #5
Hej, tak for indsatsen.. Har ikke formuleret mig godt nok. Det er ikke nødvendigt at oprette ny tabel.

Jeg arbejder med (i uddrag)
pl.spillerid
pl.position
pl.nummer

pl.position indeholder "Målmand", "Forsvar", "Midtbane", "Angriber"

Jeg vil gerne have sorteret i den rækkefølge:

Målmand
Forsvar
Midtbane
Angriber

Og indenfor den enkelte pl.position efter pl.nummer

Desværre er ovenstående ikke i alfabetisk rækkefølge, så jeg skal "tvinge" denne order ud.

Hvis nu jeg siger ORDER BY pl.position desc, pl.nummer asc
er jeg tæt på, se evt http://www.hvemvandt.dk/arkiv/vishold.php?id=13
Avatar billede thesurfer Nybegynder
14. juni 2009 - 15:56 #6
Som jeg ser det, virker din URL næsten som den skal, pånær at den ikke sorterer "postion" korrekt..

Hvis du tilføjer 1 felt mere til din tabel, der f.eks. hedder "positionsortering", der indeholder:

1 ved "Målmand"
2 ved "Forsvar"
3 ved "Midtbane"
4 ved "Angriber"

kan du bruge følgende:

ORDER BY pl.positionsortering asc, pl.nummer asc
Avatar billede thesurfer Nybegynder
14. juni 2009 - 15:58 #7
PS:

Spilleren "Sanel Kapidzic" med nr 32 står der 2 gange..
Avatar billede warberg Juniormester
14. juni 2009 - 16:08 #8
Ja ok, det var selvfølgelig en måde at "snyde" sorteringen.
Smid et svar og jeg takker for hjælpen.
Avatar billede thesurfer Nybegynder
14. juni 2009 - 16:09 #9
Jeg har lige lavet en test med følgende (jeg håber at tabellen bliver pæn):


playernum    playerpostext    playerposnumber
1        MÅ        1
7        MI        3
25        MI        3
14        MI        3
30        MI        3
21        MI        3
6        FO        2
3        FO        2
2        FO        2
18        FO        2
22        FO        2
27        FO        2
32        AN        4
11        AN        4
35        AN        4
10        AN        4

med sorteringen "order by playerposnumber asc, playernum asc" får jeg:


playernum    playerpostext    playerposnumber
1        MÅ        1
2        FO        2
3        FO        2
6        FO        2
18        FO        2
22        FO        2
27        FO        2
7        MI        3
14        MI        3
21        MI        3
25        MI        3
30        MI        3
10        AN        4
11        AN        4
32        AN        4
35        AN        4


Som du kan se, er det "MÅ", "FO", "MI", "AN" med stigende numre (i venstre side)..

Det kan lade sig gøre, fordi der er et numerisk felt at sortere på, nemlig "playerposnumber", som i mit tidligere indlæg hed "positionsortering"..
Avatar billede thesurfer Nybegynder
14. juni 2009 - 16:10 #10
Jeg ville ikke kalde at det "snyde", men at bygge tabellen op på en logisk måde.. :-)

- Svar
Avatar billede thesurfer Nybegynder
14. juni 2009 - 16:14 #11
Forresten.. mit forslag, er det man kalder "normalisering" (hvis man er til den slags fine ord)..

Det gør det meget nemmere at opdatere de felter, der bruges til..

Forstil dig at det ikke længere skal hedde "Forsvar" med "Forsvarsspiller"..


Eksempel:

Der er 100 spillere der er markeret som "Forsvar".

- Med normalisering skal du kun rette 1 post (i tabellen "tblDefinition")..

- Uden normalisering skal du rette alle de steder hvor "Forsvar" fremkommer, dvs. skal du rette 100 steder..
Avatar billede thesurfer Nybegynder
14. juni 2009 - 16:15 #12
Der skulle have stået "mit første forslag" i forrige indlæg.

- takker for points :-)
Avatar billede warberg Juniormester
14. juni 2009 - 16:29 #13
Jeg kan se det smarte i finten. Takker for input :-)
Avatar billede thesurfer Nybegynder
14. juni 2009 - 16:42 #14
Det var så lidt.. :-)

Hvis du på et tidspunkt skal arbejde med "postnummer og by" (nok ikke så aktuelt lige nu), tænk på normalisering.. :-)

Lad brugeren indtast postnummer, og lav så opslag i en normaliseret tabel.. så undgår du at en milliard brugere staver "københavn" på en milliard forskellige måder.. :-)
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