webForumDet fria alternativet

Hämta högsta poängen ur db

ASP

15 svar · 281 visningar · startad av Mz

Medlem sedan aug. 2001139 inlägg
Frågan#1

Hej.

Jag håller på att skapa en liten tävling till vårt intranät, själva tävlingen består av 10st frågor med olika alternativ, detta fungerar bra, men nu behöver jag plocka ur "vinnaren" eller "vinnarna"... vilket blir problem, vet inte hur jag skall börja...

Ex.

Omgång 1:
Lisa och Kalle vinner på 10p,
Nisse kommer tvåa på 9p.

Omgång 2:
Lasse vinner på 8p, Lisa trea på 7p.

(Det är alltså högst poäng som vinner...)

Hur plockar jag ut vinnarna ur databasen?

Vinnarna från varje "omgång" sparas sedan om i en ny tabell för endast vinnare...

Någon som kan ge mig lite tips? :)

Redigerat:
Databasen som innehåller alla tävlande ser ut så här:
ID / Räknare
Name / PM
Points / Text
(om det är till någon nytta. ;) )

------------------
~ Mz ~

[Redigerat av Mz den 10 sep 2001]

Medlem sedan juni 200032 967 inlägg
#2

Du måste ha poängfältet som talfält i tabellen om du ska kunna göra vettiga sorteringar (som denna) i tabellen.

Om vi utgår ifrån att fältet Points får typen tal, kan du skriva en SQL-fråga som denna:

strSQL = "SELECT * FROM tblTableName WHERE Points IN (SELECT TOP 1 Points FROM tblTableName ORDER BY Points DESC)"

Mvh,

------------------
målar-anders, det är jag.

Medlem sedan aug. 2001139 inlägg
#3

SELECT TOP 1 Points

Sorterar detta ut alla vinnare om det ex. är 3st som har 10p?

Du måste ha poängfältet som talfält i tabellen

Hmm, är det nått speciellt man ska tänka på när man sparar och hämtar data från ett talfält? (fnuttar etc.)

------------------
~ Mz ~

Medlem sedan juni 200032 967 inlägg
#4

Inga apostrofer runt ett talvärde.

Sorterar detta ut alla vinnare om det ex. är 3st som har 10p?

Nej, inte just den lilla del som du ryckte ur min SQL-fråga, men hela min fråga gör det, ja.

Mvh,

------------------
målar-anders, det är jag.

Medlem sedan aug. 2001139 inlägg
#5

hehe, ok sorry ;)

Ska testa, tack för hjälpen! :D

------------------
~ Mz ~

Medlem sedan aug. 2001139 inlägg
#6

...fungerar utmärkt! :D

------------------
~ Mz ~

Medlem sedan aug. 2001139 inlägg
#7

Hmm.. om jag nu vill slumpa ut en av vinnarna, hur skall jag då gå till väga?

Min kod ser i förenklad form ut så här:

	SQL = "SELECT * FROM Users WHERE uPoints IN (SELECT TOP 1 uPoints FROM Users ORDER BY uPoints DESC)"
	Set RecSet = Connect.Execute(SQL)
	
	If RecSet.EOF Then
		Response.Write "Ingen vinnare denna månad..."
	
		RecSet.Close
		Connect.Close
	
	Else
		Do Until RecSet.EOF
			Response.Write " &nbsp; "& RecSet("uPoints") &"p - "& RecSet("uNamn") &"<br>"
		RecSet.MoveNext
		Loop
	
		RecSet.Close
		Connect.Close	
	
	End If

Tacksam för all hjälp ;)

------------------
~ Mz ~

Medlem sedan juni 200032 967 inlägg
#8

Att slumpa databasposter har varit uppe på tapeten massor med gånger. Pröva att se om du hittar någonting med sökfunktionen uppe till höger.

Mvh,

------------------
målar-anders, det är jag.

Medlem sedan aug. 2001139 inlägg
#9

När jag försöker räkna antal poster som har högst poäng så får jag ett felmeddelande:

Microsoft JET Database Engine (0x80040E14)
SELECT-uttrycket innehåller ett reserverat ord eller argument som antingen är felstavat eller utelämnat, eller så är skiljetecknen felaktigt använda.
/MZReklam/tevling/admin.asp, line 255

Rad 255:
SQL = "SELECT Count(*) AS rsPosts WHERE uPoints IN (SELECT TOP 1 uPoints FROM Users)"

Utskriven SQL:
SELECT Count(*) AS rsPosts WHERE uPoints IN (SELECT TOP 1 uPoints FROM Users)

Några tips?

------------------
~ Mz ~

Medlem sedan juni 200032 967 inlägg
#10

Jag skulle gissa på att Users är ett ord som är reserverat. Prova att byta namn på det fältet, alternativt att klamra [Users] i SQL-frågan.

Mvh,

------------------
målar-anders, det är jag.

Medlem sedan aug. 2001139 inlägg
#11

Nja, jag har redan testat det, felmeddelandet kvarstår dock.

SQL = "SELECT Count(*) AS rsPosts WHERE uPoints IN (SELECT TOP 1 uPoints FROM [Users])"

------------------
~ Mz ~

Medlem sedan juni 200032 967 inlägg
#12

Sorry. :r

Du har glömt att specificera tabell i din fråga...

SQL = "SELECT Count(*) AS rsPosts FROM [Users] WHERE uPoints IN (SELECT TOP 1 uPoints FROM [Users])"

------------------
målar-anders, det är jag.

Medlem sedan dec. 200012 464 inlägg
#13

Users är inte ett reserverat ord.

Du har ingen from med i din första select

SQL = "SELECT Count(*) AS rsPosts from users WHERE uPoints IN (SELECT TOP 1 uPoints FROM Users)"

------------------
essentitia preter non sans multiplicandum

Medlem sedan juni 20019 024 inlägg
#14

Fy skäms @nders!
Och du ska kalla dig forumledare!!

------------------
"It's not where ya from it's where ya at"

Medlem sedan dec. 200012 464 inlägg
#15

Du bör också ha med en order by när du använder top.

SQL = "SELECT Count(*) AS rsPosts from users WHERE uPoints IN (SELECT TOP 1 uPoints FROM Users order by upoints desc)"

eller så kan man skriva det mer portabelt

SQL = "SELECT Count(*) AS rsPosts from users WHERE uPoints IN (SELECT max(uPoints) FROM Users)"

------------------
essentitia preter non sans multiplicandum

Medlem sedan aug. 2001139 inlägg
#16

Aha, nu fungerar det som det är tänkt - slumpat och klart!
Tack allesammans! :)

------------------
~ Mz ~

261 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)