den giver queryen et "virtuelt tabel navn" som goer at man kan bruge x.feltnavn til at refere til felter fra queryen, hvilket kan vaere noedvendigt hvis man joiner flere tabeller
det er ikke tilfaeldet her, men i de fleste (alle ?) databaser er det navn required
Tak for input gutter.. undskyld jeg først svarer nu.. nu skal jeg høre engang.. som jeg også skrev har jeg mange talfelter.. Altså, p1, p2, p3, p4, p5, p6, p7 osv..
Skal det forstås sådan at du i hver række i din tabel har (mindst 7) værdier:
p1, p2, p3, p4, p5, p6, p7
- og at du øsnker at finde de 5 største af disse? Måske kunne du lige beskrive hvad det er for en slags data du har liggende? Hedder felterne "p1" osv., eller hedder de noget andet?
- deltagernavn (tekst) - deltager_beskrivelse (note) - p1 (tal) - p2 (tal) - p3 (tal) op til p12 (tal)
i de felter hvor jeg har p'er skriver jeg forskellige points ind.. Dvs. hvis en person deltager i alle turneringer får vedkommende points 12 gange.. Det som systemet så skal kigge på er, at tjekke alle points vedkommende har fået, finde de 5 største, ligge dem sammen og sortere efterfølgende...
Nej, man kan ikke rigtigt lave noget smart ... der er egentlig kun "hårdt" ASP-kodning ud af problemet. Og med 5 ud af 12 mulige, så bliver det nok rimeligt meget ASP-kode vi snakker om. :^|
nielle, undskyld igen igen at jeg har været lidt sent på den... men hvis du kunne hjælpe vil jeg meget gerne lave database strukturen om og prøve på den måde..?
Jeg vil klart anbefale at du laver strukturen om. Men jeg er også klar over at du måske allerede har meget eksiterende kode, som så skal skrives delvist om. Selvfølgeligt kan problemet løses med din nuværende struktur, men løsningen bliver bare temmeligt "bøvlet" fordi at databasestrukturen ikke er optimal til lige det.
Så derfor ville jeg bare vide om:
1) Ønsker du at beholde den nuværende struktur, og så at vi laver den "bøvlede løsning*, eller at: 2) Du laver database strukturen om (med hvad der deraf følger), og at vi så kan lave den "elegante løsning" til dig?
Jeg kan ikke sige dig hvor lang tid den elegante tager ... for jeg ved jo ikke hvor meget kode du har som skal laves om. Selve løsningen tager dog ikke specielt lang tid. Vi snakker maks om en time eller noget i den stil.
Der er imidlertid andre grunde til at lave din database om (og vi snakker trods alt kun om en tabel af dem du måtte have i databasen). Den nuværende struktur er f.eks. ikke normaliseret. At normalisere en database er normalt begrundet ud fra sund fornuft - der er f.eks. ikke grund til at have de P# felter med i dit eksempel som alligevel ikke er udfyldt hvis personen ikke deltager i en af kampene. Det er dog ikke altid sort/hvidt, og tit vil man se at selv garvede databasefolk ser delvist bort fra normaliseringn af forskellige andre hensyn.
Men en normaliseret database betyder som regel at det er nemmere at lægge ny funktionalitet til på et senere tidspunkt. Den er altså mere vedligeholdelsevenlig.
1) Det er ikke alle brugere som har JavaScript slået til i deres browser.
2) For hver kode-tilpasning I laver oven på jerens nuværende struktur, desto sværere bliver det for jer at ændre jeres database på et senere tidspunkt.
3) Hvis I havde valgt at lægge strukturen om, ville løsningen have været nærmest triviel. Måske havde I oven i købet kunne spare tid ved en omlægning...
sql = "SELECT * FROM dinTabel WHERE id = 42" Set data = Conn.Execute(sql)
If Not data.EoF Then ' Opret et array til de 5 bedste resultater. Dim bedsteResultater(5)
' Nulstil pladserne. For idx=1 To 5 bedsteResultater(idx) = 0 Next
' Denne variabel sikre at vi kan håndtere situationen ' hvor at der evt. er et "hul" i listen af resultater. resultatNr = 0
' Gennemløb de mulige kampe. For kamp=1 To 12 ' Find resultatet af den enkelte kamp. feltNavn = "p" & kamp resultat = "" & data(feltNavn)
' Hvis der er et reultat, undersøges det. If resultat = "" Then ' Optæl antallet af resultater. resultatNr = resultatNr+1
' Hvis der er færre end 5 resultater endnu, ' lægges resulatet direkt i listen If resultatNr<=5 Then bedsteResultater(resultatNr) = resultat Else ' Der er nu mere end 5 reultater.
' Find det mindste resultat i listen af resulater. minimumIdx = 1 minimum = bedsteResultater(minimumIdx)
For idx=2 To 5 If bedsteResultater(idx) < minimum Then minimumIdx = idx minimum = bedsteResultater(minimumIdx) End If Next
' Overskriv det mindste med det nye. If resultat > minimum Then bedsteResultater(minimumIdx) = resultat End If End If End If Next
' Udregn summen af de 5 bedste resultater. sum = 0 For idx=1 To 5 sum = sum + bedsteResultater(idx) Next
' Udskriv. Response.Write "Bedste 5 kampe: " & sum 6 "<br>" Else Response.Write "Den pågældende spiller blev ikke fundet." End If
===== Med tabel-strukturen fra 22/08-2006 12:15:22 =====
sql = "SELECT sum(point) AS total (SELECT TOP 5 point FROM point WHERE deltagerId = 42 ORDER BY point DESC)" Set data = Conn.Execute("total") Response.Write "Bedste 5 kampe: " & data("total") 6 "<br>"
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.