24. januar 2002 - 12:58Der 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 ???
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.
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.. :))
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.
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
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
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
"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.
"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.
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.
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.
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. ;)
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* :)
Synes godt om
Ny brugerNybegynder
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.