Avatar billede moore Nybegynder
24. januar 2002 - 12:58 Der er 17 kommentarer og
1 løsning

Between

Hej

Hvis man nu vil lave sådan at når man logger ind på et score system, så bliver man selv vist (evt. med fed skrift) og så bliver der vist de 5 over en og 5 under en.??.. De 5 over og under en skal vises ud fra den score de har..

Når man logger sig ind så får man automatisk et ID nummer med over.

Jeg har forsøgt med between, men kan ikke rigtigt få det til at virke... Nogen som har andre forslag/kode ???
Avatar billede oswald Nybegynder
24. januar 2002 - 13:01 #1
Prøv at lave en union, hvor du først tager top 5 af scores der ligger før din bruger i faldende rækkefølge og dernæst top 5 af scores der ligger efter din bruger i stigende rækkefølge.

Oswald
Avatar billede oswald Nybegynder
24. januar 2002 - 13:02 #2
Det var vist ment som et svar.

Oswald
Avatar billede moore Nybegynder
24. januar 2002 - 13:06 #3
Nu er jeg lidt af en wanna be programmør..
Så hvis du kan evt. vise mig lidt hvordan du vil gøre det så får du også pointene.
For jeg må indrømme at jeg aldrig før har hørt begrebet Union.. :))
Avatar billede tmceu Praktikant
24. januar 2002 - 13:08 #4
Ligger placeringen i et felt eller skal den beregnes dynamisk på baggrund af poster i en anden tabel ?
Avatar billede moore Nybegynder
24. januar 2002 - 13:10 #5
Placering (scoren) ligger i et felt for sig selv. Dvs. i DB har score en kolonne for sig selv.
Når man så klikker på vundet kamp, så bliver feltet score automatisk opdateret.
Nu vil jeg jo så gerne bare have vist/se hvordan man så får de 5 over en vist og 5 under en.
Så men evt. selv (hvis man er i midten) står med fed skrift.
Avatar billede oswald Nybegynder
24. januar 2002 - 13:26 #6
Jeg må indrømme at den var lidt mere besværlig end jeg selv troede, men her kommer den. Jeg har en tabel som indeholder ID og Score (Begge int) Hvis du vil have brugernavn med så må du Joine på en bruger tabel.

select * from(

'Her finder du personen selv (Ham med IDnummer 78)
SELECT    Score.ID, Score.Score FROM Score where Score.ID = 78

union all



'Her finder du de 5 personer der har en højere score end din bruger
select * from (SELECT    TOP 5 Score.ID, Score.Score
FROM        Score INNER JOIN
                      Score Score_1 ON Score.Score > Score_1.Score AND Score_1.ID = 78
ORDER BY Score.Score desc) as da




union all



'Her finder du de 5 næste brugere
select * from(
SELECT    TOP 5 Score.ID, Score.Score
FROM        Score INNER JOIN
                      Score Score_1 ON Score.Score < Score_1.Score AND Score_1.ID = 78
ORDER BY Score.Score) as da



) as da order by score desc
Avatar billede moore Nybegynder
24. januar 2002 - 13:28 #7
Takker meget.. og værsgo... dine point flyver til dig.
Avatar billede oswald Nybegynder
24. januar 2002 - 13:29 #8
Jamen du skal da være så velkommen. ;).

Oswald
Avatar billede moore Nybegynder
24. januar 2002 - 13:38 #9
UPS.. et enkelt spørgsmål..
Nu hvor jeg har kopieret det hele over og rettet lidt til osv.. så melder den ny fejl..
Sådan har ser koden ud nu efter at den er rettet lidt til..
Jeg ved godt at der ikke er nogle point på spil nu, men håber på at du  evt. har et svar..

På forhånd tak for hjælpen.

strSQL4 = "select * from(SELECT Score.ID, Score.Score FROM Score where Score.ID = 78"
union all

strsql4 = select * from (SELECT TOP 5 Score.ID, Score.Score FROM Score INNER JOIN Score Score_1 ON Score.Score > Score_1.Score AND Score_1.ID = 78 ORDER BY Score.Score desc) as da

union all

strsql4 = select * from( SELECT TOP 5 Score.ID, Score.Score FROM Score INNER JOIN Score Score_1 ON Score.Score < Score_1.Score AND Score_1.ID = 78
ORDER BY Score.Score) as da ) as da order by score desc
Avatar billede moore Nybegynder
24. januar 2002 - 13:49 #10
Det er det union all jeg ikke rigtigt kender.. og så skriver du .. as da (hvad betyder det) *G*..
Avatar billede oswald Nybegynder
24. januar 2002 - 14:16 #11
Det er OK. Jeg forstår godt at den er lidt svær. Jeg tager dem lige en af gangen.

Hele SQL'en skal eksekveres som en enhed. Som følgende.

SQL = "select * from(
SELECT    Score.ID, Score.Score FROM Score where Score.ID = 78
union all
select * from (SELECT    TOP 5 Score.ID, Score.Score
FROM        Score INNER JOIN
                      Score Score_1 ON Score.Score > Score_1.Score AND Score_1.ID = 78
ORDER BY Score.Score desc) as da
union all
select * from(
SELECT    TOP 5 Score.ID, Score.Score
FROM        Score INNER JOIN
                      Score Score_1 ON Score.Score < Score_1.Score AND Score_1.ID = 78
ORDER BY Score.Score) as da
) as da order by score desc
Avatar billede oswald Nybegynder
24. januar 2002 - 14:18 #12
"Union" er en samling af forspørgsler der har de samme felter. Union all er en speciel måde at lave den på som gør at den ikke kontrolerer at der er to rækker der hedder det samme, hvilket gør den lidt hurtigere.
Avatar billede oswald Nybegynder
24. januar 2002 - 14:20 #13
"As da" er en vane jeg har fra når jeg laver joins, men den er vist ikke nødvendig i union's. Når man laver nestede select sætninger (som 'Select * from (....) as da') er så midster den inderste select sit tabel navn hvilket er et problem når man laver joins.
Avatar billede moore Nybegynder
24. januar 2002 - 14:50 #14
Ok...
Lige her til sidst.. når jeg forsøger at køre de sqlsætninger som jeg har lavet (strSQL4) så får jeg følgende fejl.

Nedenunder har jeg lavet en response.write strSQL4

select * from medlemmer(SELECT TOP 5 Score.ID,Score.Score FROM Score INNER JOIN Score Score_1 ON Score.Score < Score_1.Score AND Score_1.ID =80 ORDER BY Score.Score order by score desc)

og så kommer følgende fejl..

Microsoft JET Database Engine fejl '80040e14'

Der er en syntaksfejl i FROM-delsætningen.

Jeg har selv forsøgt siden at jeg fik den af dig og finde fejlen, men nu må jeg nok melde pas..
Sorry at jeg bliver nødt til at trække lidt mere på din hjælp uden at du får "credits". Men håber at det går.

/Thomas
Avatar billede oswald Nybegynder
24. januar 2002 - 15:24 #15
Problemet er din 'Medlemmer' Hele parantesen fungerer som en tabel, og skal behandles som en.
Hedder den tabel hvor du har din score 'Score' ?
Avatar billede moore Nybegynder
24. januar 2002 - 18:19 #16
Min scorestatus ligger i min tabel Medlemmer. Score er bare en kolonne i tabellen medlemmer. For jeg gider ikke køre det i flere tabeller end højst nødvendigt..

Skal hele den kode du så var så venlig at lave så laves om??.. eller er det bare nogle små justeringer.

/thomas
Avatar billede oswald Nybegynder
24. januar 2002 - 21:48 #17
Hej Thomas.

Ja den skal laves om, men det er ikke så slemt. Hvis du giver mig en liste over de felter du vil have med fra tabellen Medlemmer så skal jeg nok lave rettelserne, men det bliver først imorgen. ;)

Oswald
Avatar billede moore Nybegynder
25. januar 2002 - 09:10 #18
Takker dybt.

Her kommer de felter som jeg skal have vist fra DB'en.

Fornavn,Efternavn,Kampetabt,Kampevundet,Score

Alle felterne ovenover er fra samme DB som hedder Medlemmer.
Det kan være at jeg vil lave en kolonne mere som hedder "Rang", som jo viser at den som har højst score automatisk har rang 1 osv osv., Men det er ikke noget du behøver at gøre. For som sagt det er kun en tanke jeg har.

Takker igen meget for hjælpen. *S* :)
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