webForumDet fria alternativet

Lista poängställning, summering i sidled!

ASP

9 svar · 599 visningar · startad av Alamartimo

Medlem sedan okt. 2004129 inlägg
Frågan#1

Hejsan!

Har stött på ett problem med en listning av Tävlande och poäng med en summering längst ut till höger.

Tanken är jag ska lista enligt nedan

|Alamartimo|10|10|15|15|50|
|Tävlande 2|15|15| 5| 5|40|
etc
etc

Tidigare hade jag bara namn och summeringen i tabellen men vill även ha med poängen för de enskilda tävlingarna med.

Summeringen gjorde jag så här:

strSQL = "SELECT SUM(Points) AS PSUM, Driver, TeamName, CarNumber FROM race Where League = '" & strLEG & "' GROUP BY Driver ORDER BY PSUM DESC"

fungerar jättebra att få ut den infon.

Men jag får inte till det när jag ska ta fram poängen för de enskilda tävlingarna.

Jag har förutom det ovan ett fält som heter Points och ett fält som heter R

I fältet R ligger info om vilken tävling det handlade om.

Sen så är det inte fast satt hur många tävlingar det kan handla om utan det värdet är variabelt.

Någon som kan ge mig en vink om hur jag ska gå till väga?

EDIT: Glömde ju

För varje tävling skapas en rad med

Namn, Vilken tävling (R), och hur många poäng den tävlande fick.

Och utifrån det vill jag ha en sammanställning som visas.

Medlem sedan dec. 19996 721 inlägg
#2

Du kan inte plocka ut de unika resultaten i samma fråga som du plockar ut summan (jo, rent tekniskt går det, men det är fult). I varje loopvarv där du skriver ut summan får du köra en extra fråga som plockar ut de unika resultaten.

Medlem sedan okt. 2004129 inlägg
#3

Ja det kom jag också fram till och körde en snurra till inne i den första loopen genom att köra.

strSQL = "SELECT points FROM race Where League = '" & strLEG & "' AND Driver = '" & strDriver & "'

Ja något sånt var det men den radar upp det fel..

Ex:

Om tävlande 2 i exemplet nedan inte är med i tävling 2 så blir inte resultatet så här. (där tävling 2 för Tävlande 2 är tomt)

|Alamartimo|10|10|15|15|50|
|Tävlande 2|15| | 5| 5|40|

utan det blir så här:

|Alamartimo|10|10|15|15|50|
|Tävlande 2|15| 5| 5|40|

då ser det ut som tävlande 2 inte var med i tävling 4 istället för tävling 2.

Medlem sedan okt. 2004129 inlägg
#4

Nu har jag kommit så här långt men det är ändå inte rätt.

Ni kan kolla hur uppställningen/listan ser ut här:
Standings SRL

Det är bara är 3st som varit med i alla 10 tävlingar och då blir det rätt med fälten och var summeringen hamnar på dessa.
Sista kolumnen som har ett värde är summeringen av tidigare poäng.

Vad som blir fel är de som inte varit med i några tävlingar.

Rubrikerna har jag satt manuellt då jag först vill få ut infot rätt.

Så här långt ser koden ut såhär:

	strSQL = "SELECT SUM(Points) AS PSUM, Driver, Position, TeamName, CarNumber FROM race Where League = '" & strLEG & "' AND RTYPE = 'Race' GROUP BY Driver ORDER BY PSUM DESC"
	Set rsPSUM = Conn.Execute(strSQL)

	Do Until rsPSUM.EOF

	intPSUM = rsPSUM("PSUM")
	strDriver = rsPSUM("Driver")

	SQL = "Select Nation FROM drivers WHERE Driver = '" & strDriver & "'"
	Set rsNat = Conn.Execute(SQL)
	Count = Count + 1

	Response.Write "<tr  onMouseover=""this.bgColor='#435475'"" onMouseout=""this.bgColor='#34415A'"">"
	Response.Write "<td width=""26"" height=""15"" valign=""top"">"
	Response.Write "<div align=""left""><font size=""1"" color=""#C9CBCF"" face=""Verdana, Arial, Helvetica, sans-serif""><b>" & Count & "</b></font></div></td>"
	Response.Write "<td width=""140"" height=""15"" valign=""top"">"
	Response.Write "<div align=""left""><font size=""1"" face=""Verdana, Arial, Helvetica, sans-serif"" color=""FFFFFF""><b>" & strDriver & " <img src=""flags/" & rsNat("Nation") & ".png""></b></font><br>"
	Response.Write "<font size=""1"" color=""#C9CBCF"" face=""Verdana, Arial, Helvetica, sans-serif"">" & rsPSUM("TeamName") & "</font></div></td>"

	SQL = "SELECT Points FROM race WHERE League = '" & strLEG & "' AND Driver = '" & strDriver & "' AND RTYPE = 'Race'"
	Set rsP = Conn.Execute(SQL)

	Do Until rsP.EOF

	Response.Write "<td width=""22"" height=""15"" valign=""top""><div align=""center""><font size=""1"" color=""#C9CBCF"" face=""Verdana, Arial, Helvetica, sans-serif""><b>" & rsP("Points") & "</b></font></div></td>"

	rsP.MoveNext
	Loop
	Response.Write "<td width=""22"" height=""15"" valign=""top"">"
	Response.Write "<div align=""center""><font size=""1"" color=""#C9CBCF"" face=""Verdana, Arial, Helvetica, sans-serif""><b>" & intPSUM & "</b></font></div></td></tr>"

	rsPSUM.MoveNext
	Loop

Någon som har en ide?

Tack på förhand

Medlem sedan apr. 20031 660 inlägg
#5

HEJ!

Hmm, är det inte i dessa lägen man använder sig av LEFT/RIGHT JOIN, dvs man tar med värden från en tabell fast det inte finns motsvarande värde?
Någon sql-guru fixar säkert det, men då måste din databas ha tävlande och tävlingar i vars sin tabell.
Om du redan har det vågar jag inte svara på med utgångspunkt från din kod.

Medlem sedan okt. 2004129 inlägg
#6

J.N.

Jag har allt i samma tabell (race)
Fast jag har deltagarna i en annan tabell också som jag använder för info om de tävlande.

Och när jag läser in XML filen (resultatfilen för en enskild tävling) så görs en rad för varje tävlande i tabellen race.

Driver, Position, GridPos, Points, Event, Datum, R etc

ja det är en hel del info som går in där.

I övrigt fungerar sajten kanon men så fick jag den här förfrågan och insåg att jag totalt missat den biten när jag byggde sajten.

Jag förstår att jag kanske borde ha byggt upp den på ett annat sätt men jag tror att det borde gå att få till det på det sättet jag har DB'n uppbyggd idag.

Medlem sedan apr. 20031 660 inlägg
#7

Okej.

Min första tanke när jag läste frågan tidigare idag var att du på något sätt måste veta vilken poäng som hör till vilken tävling, löst mha någon form av (krånglig) programmering i bakgrunden.

När jag sedan tittade på tråden igen, kom jag på att JOIN fixar ju det automatiskt, om resten hänger med.
Frågan är om det gör det, dvs du måste kanske hantera det som jag ursprungligen tänkte; mer manuellt?

Medlem sedan okt. 2004129 inlägg
#8

J.N. skrev:

Okej.
Min första tanke när jag läste frågan tidigare idag var att du på något sätt måste veta vilken poäng som hör till vilken tävling, löst mha någon form av (krånglig) programmering i bakgrunden.

Ja det var ju tanken faktiskt så du tänkte rätt.

I länken som jag postade nyss så är ju rubrikerna R1, R2, R3 etc tävlingarna som är körda.

Men vad som händer är att den trycker ihop alla poäng för respektive tävlande och radar dom i sidled efter varann och poängen hamnar alltså inte där de ska hamna (under rätt tävling R1, R2 etc).

Och summeringen av alla poäng hamnar inte således längst till höger under rubriken SUM.

Jag har en vän som säger att han fixat något liknande så jag hoppas jag får ett exempel av honom. Vet dock inte om det var i PHP han kanske fixade det.

Medlem sedan okt. 2004129 inlägg
#9

Okej nu börjar jag närma mig.

Nu listas det så här:

Standings SRL

Men som ni ser så stannar den upp efter den första tävlande.
Annars ser man att den som är överst inte varit med i första tävlingen precis som det ska vara.

Nu ser koden ut som följer.

strSQL = "SELECT SUM(Points) AS PSUM, Driver, Position, TeamName, CarNumber FROM race Where League = '" & strLEG & "' AND RTYPE = 'Race' GROUP BY Driver ORDER BY PSUM DESC"
	Set rsPSUM = Conn.Execute(strSQL)

	Do Until rsPSUM.EOF

	Count = Count +1

	intPSUM = rsPSUM("PSUM")
	strDriver = rsPSUM("Driver")

	SQL = "Select Nation FROM drivers WHERE Driver = '" & strDriver & "'"
	Set rsNat = Conn.Execute(SQL)

	Response.Write "<tr>"
	Response.Write "<td>"
	Response.Write Count 
	Response.Write "<td>"
	Response.Write strDriver
	Response.Write rsPSUM("TeamName") 

	strSQL = "SELECT TrackCourse, Dat, League FROM race Where League = '" & strLEG & "' GROUP BY Dat, TrackCourse ORDER BY Dat"
	Set rsTrack = Conn.Execute(strSQL)
	Do until rsTrack.EOF
	intCount = intCount +1

	SQL = "SELECT Points FROM race WHERE League = '" & strLEG & "' AND Driver = '" & strDriver & "' AND RTYPE = 'Race' AND [B]R = '" & intCount & "'[/B]"
	Set rsP = Conn.Execute(SQL)

	if not rsP.eof then
	Do until rsP.eof
	Response.Write "<td>" & rsP("Points") & "</td>"
	rsP.MoveNext
	Loop
	else
	Response.Write "<td>" & "-" & "</td>"
	end if

	rsTrack.MoveNext
	Loop

	Response.Write "<td>" & intPSUM & " & "</tr>"

	rsPSUM.MoveNext
	Loop

Jag har tagit bort lite onödigt i koden som formatering av text för att ni lättare ska se.

Det i fetstil fungerar första gången alltså och jag har provat att flytta loopen rsTrack som den räknar antal race som är gjorda.

Någon som har ett snabbt tips?

Medlem sedan okt. 2004129 inlägg
#10

Jag löste det med en "for i=1 to (antal tävlingar)"

strSQL = "SELECT SUM(Points) AS PSUM, Driver, Position, TeamName, CarNumber FROM race Where League = '" & strLEG & "' AND RTYPE = 'Race' GROUP BY Driver ORDER BY PSUM DESC"
	Set rsPSUM = Conn.Execute(strSQL)

	Do Until rsPSUM.EOF

	Count = Count +1

	intPSUM = rsPSUM("PSUM")
	strDriver = rsPSUM("Driver")

	SQL = "Select Nation FROM drivers WHERE Driver = '" & strDriver & "'"
	Set rsNat = Conn.Execute(SQL)

	Response.Write "<tr  onMouseover=""this.bgColor='#435475'"" onMouseout=""this.bgColor='#34415A'"">"
	Response.Write "<td width=""26"" height=""15"" valign=""top"">"
	Response.Write "<div align=""left""><font size=""1"" color=""#C9CBCF"" face=""Verdana, Arial, Helvetica, sans-serif""><b>" & Count & "</b></font></div></td>"
	Response.Write "<td width=""140"" height=""15"" valign=""top"">"
	Response.Write "<div align=""left""><font size=""1"" face=""Verdana, Arial, Helvetica, sans-serif"" color=""FFFFFF""><b>" & strDriver & " <img src=""flags/" & rsNat("Nation") & ".png""></b></font><br>"
	Response.Write "<font size=""1"" color=""#C9CBCF"" face=""Verdana, Arial, Helvetica, sans-serif"">" & rsPSUM("TeamName") & "</font></div></td>"

	[B]for i=1 to Counter

	SQL = "SELECT Points FROM race WHERE League = '" & strLEG & "' AND Driver = '" & strDriver & "' AND RTYPE = 'Race' AND R = '" & (i) & "'"
	Set rsP = Conn.Execute(SQL)[/B]
	if not rsP.eof then
	Do until rsP.eof

	Response.Write "<td width=""22"" height=""15"" valign=""top""><div align=""center""><font size=""1"" color=""#C9CBCF"" face=""Verdana, Arial, Helvetica, sans-serif""><b>" & rsP("Points") & "</b></font></div></td>"
	rsP.MoveNext
	Loop
	else
	Response.Write "<td width=""22"" height=""15"" valign=""top""><div align=""center""><font size=""1"" color=""#C9CBCF"" face=""Verdana, Arial, Helvetica, sans-serif""><b> - </b></font></div></td>"
	end if

	[B]next[/B]

	Response.Write "<td width=""22"" height=""15"" valign=""top"">"
	Response.Write "<div align=""center""><font size=""1"" color=""#C9CBCF"" face=""Verdana, Arial, Helvetica, sans-serif""><b>" & intPSUM & "</b></font></div></td></tr>"

	rsPSUM.MoveNext
	Loop

Nu fungerar det utmärkt. :)

750 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
593 ms — deklarationer (db)
0 ms — hämta statistik (cache)
154 ms — hämta tråd, inlägg och bilagor (db)
593 ms — ändringar (db)