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?
Annonceindlæg fra Cognizant
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..
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
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")
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)..
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
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
PS: Spilleren "Sanel Kapidzic" med nr 32 står der 2 gange..
Ja ok, det var selvfølgelig en måde at "snyde" sorteringen. Smid et svar og jeg takker for hjælpen.
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"..
14. juni 2009 - 16:10
#10
Jeg ville ikke kalde at det "snyde", men at bygge tabellen op på en logisk måde.. :-) - Svar
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..
14. juni 2009 - 16:15
#12
Der skulle have stået "mit første forslag" i forrige indlæg. - takker for points :-)
14. juni 2009 - 16:29
#13
Jeg kan se det smarte i finten. Takker for input :-)
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.. :-)
Computerworld tilbyder specialiserede kurser i database-management