15. januar 2002 - 19:25
Der er
3 kommentarer og
1 løsning
Formbarometer - problemer med udtræk af DB
Hejsa!
Jeg har hårdt brug for hjælp til løsning af følgende:
Jeg laver en fodboldside og i den forbindelse vil jeg meget gerne kunne lave et formbarometer over f.eks. de sidste 6 kampe hvert hold har spillet.
Formbarometeret skulle gerne se således ud:
Hjemme Ude
# Holdnavn Vund. Uafgj. Tabt Vund. Uafgj. Tabt Point
1. Andeby 2 1 0 2 0 1 13
etc.
Til dette har jeg 2 tabeller i en DB (Access 2K)
Tabel 1: Kampliga
Med følgende felter
Id hjemmehold udehold hjemmemaal udemaal runde
Hvor Id er autonummerering. Hjemmehold og udehold bliver indtastet med tal fra 1 - 16, som er id for holdene (se næste tabel)
Tabel 2 (Klubber)
Med felterne:
Klubid, Klubnavn
Jeg har lavet relation mellem hjemmehold -> Klubid, og Udehold->Klubid
Jeg har forsøgt med adskillige SQL konstruktioner men kan ikke få det knækket.
Jeg ved, at det er meget forlangt, men jeg håber inderligt I kan hjælpe.
På forhånd tak! :-)
Og spørg endelig, hvis ovenstående er lidt tåget forklaret.
17. januar 2002 - 00:23
#1
Jeg blev \"desværre\" bidt af dit problem.
Jeg mener at der skal laves en form for gennemgang og sortering som jeg har valgt at lave i en midlertidig tabel 3 (formbarometer) med følgende felter: (ID as auto, Session, Klub, HV, HU, HT, UV, UU, UT, Point) alle som tal.
<%
Dim intHV, intHU, intHT, intUV, intUU, intUT, intPoint
sub NulstilPoint
intHV = 0
intHU = 0
intHT = 0
intUV = 0
intUU = 0
intUT = 0
intPoint = 0
end sub
sub BeregnPoint(intI)
if intI = RS(\"hjemmehold\") then
if RS(\"hjemmemaal\") > RS(\"udemaal\") then
intHV = intHV + 1
intPoint = intPoint + 3
else
if RS(\"hjemmemaal\") < RS(\"udemaal\") then
intHT = intHT + 1
else
intHU = intHU + 1
intPoint = intPoint + 1
end if
end if
else
if RS(\"hjemmemaal\") < RS(\"udemaal\") then
intUV = intUV + 1
intPoint = intPoint + 3
else
if RS(\"hjemmemaal\") > RS(\"udemaal\") then
intUT = intUT + 1
else
intUU = intUU + 1
intPoint = intPoint + 1
end if
end if
end if
end sub
Set Conn = Server.CreateObject(\"ADODB.Connection\")
Conn.Open \"DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=\" & \"data.mdb\"
\' Slet evt. denne brugers seneste formbarometer
Conn.Execute(\"delete from formbarometer where Session=\" & Session.SessionID)
\' Opret denne brugers seneste formbarometer
for intI = 1 to 16
Set RS = Conn.Execute(\"SELECT * FROM kampliga where (hjemmehold=\" & CStr(intI) & \" or udehold=\" & CStr(intI) & \") and (runde > 0)\")
if not RS.EOF then
NulstilPoint
BeregnPoint(intI)
SQLstmt = \"INSERT INTO formbarometer (Session, Klub, HV, HU, HT, UV, UU, UT, Point) VALUES (\"
SQLstmt = SQLstmt & Session.SessionID & \", \"
SQLstmt = SQLstmt & CStr(intI) & \", \"
SQLstmt = SQLstmt & CStr(intHV) & \", \"
SQLstmt = SQLstmt & CStr(intHU) & \", \"
SQLstmt = SQLstmt & CStr(intHT) & \", \"
SQLstmt = SQLstmt & CStr(intUV) & \", \"
SQLstmt = SQLstmt & CStr(intUU) & \", \"
SQLstmt = SQLstmt & CStr(intUT) & \", \"
SQLstmt = SQLstmt & CStr(intPoint) & \");\"
Conn.Execute SQLstmt
Set RSUnique = Conn.Execute(\"SELECT ID FROM formbarometer WHERE Session=\" & Session.SessionID & \" and klub=\" & CStr(intI))
strID = RSUnique(\"ID\")
RSUnique.Close
RS.MoveNext
Do While Not RS.EOF
BeregnPoint(intI)
SQLstmt = \"UPDATE formbarometer Set HV=\" & CStr(intHV) & \", \"
SQLstmt = SQLstmt & \"HU=\" & CStr(intHU) & \", \"
SQLstmt = SQLstmt & \"HT=\" & CStr(intHT) & \", \"
SQLstmt = SQLstmt & \"UV=\" & CStr(intUV) & \", \"
SQLstmt = SQLstmt & \"UU=\" & CStr(intUU) & \", \"
SQLstmt = SQLstmt & \"UT=\" & CStr(intUT) & \", \"
SQLstmt = SQLstmt & \"Point=\" & CStr(intPoint)
SQLstmt = SQLstmt & \" WHERE ID=\" & strID & \";\"
Conn.Execute SQLstmt
RS.MoveNext
Loop
end if
next
RS.Close
\' Vis formbarometer
Set RS = Conn.Execute(\"SELECT * FROM formbarometer order by Point Desc\")
Response.Write(\"<div align=\'center\'><table width=\'50%\' border=\'1\'>\")
Response.Write(\"<tr>\")
Response.Write(\"<td width=\'5%\'>#</td>\")
Response.Write(\"<td width=\'26%\'>Klub</td>\")
Response.Write(\"<td width=\'9%\'>H.V.</td>\")
Response.Write(\"<td width=\'9%\'>H.U.</td>\")
Response.Write(\"<td width=\'9%\'>H.T.</td>\")
Response.Write(\"<td width=\'9%\'>U.V.</td>\")
Response.Write(\"<td width=\'9%\'>U.U.</td>\")
Response.Write(\"<td width=\'9%\'>U.T.</td>\")
Response.Write(\"<td width=\'5%\'>P</td>\")
Response.Write(\"</tr>\")
intCnt = 1
Do While Not RS.EOF
Response.Write(\"<tr>\")
Response.Write(\"<td width=\'5%\'>\" & CStr(intCnt) & \"</td>\")
Response.Write(\"<td width=\'26%\'>\" & RS(\"Klub\") & \"</td>\")
Response.Write(\"<td width=\'9%\'>\" & RS(\"HV\") & \"</td>\")
Response.Write(\"<td width=\'9%\'>\" & RS(\"HU\") & \"</td>\")
Response.Write(\"<td width=\'9%\'>\" & RS(\"HT\") & \"</td>\")
Response.Write(\"<td width=\'9%\'>\" & RS(\"UV\") & \"</td>\")
Response.Write(\"<td width=\'9%\'>\" & RS(\"UU\") & \"</td>\")
Response.Write(\"<td width=\'9%\'>\" & RS(\"UT\") & \"</td>\")
Response.Write(\"<td width=\'5%\'>\" & RS(\"Point\") & \"</td>\")
Response.Write(\"</tr>\")
intCnt = intCnt + 1
RS.MoveNext
Loop
Response.Write(\"</table></div>\")
RS.Close
%>
Der oprettes et resultat for hver bruger. Det er i princippet ikke nødvendigt da alle får samme resultat - meeeeen alligevel - for at undgå problemer.
Håber det kan bruges.
17. januar 2002 - 20:20
#2
Hej Coltau!
Først og fremmest en stor, stor tak til dig fordi du \"desværre\" blev bidt af det - det glæder mig meget! ;-)
Dernæst, så kan jeg ikke andet end sige, at det virker jo! Skønt, skønt!
Jeg skal blot høre dig af om du har et forslag til hvorledes jeg i tabellen, der lister resultatet får det faktiske holdnavn i stedet for hold ID\'et?
Kanonarbejde af dig - det er virkelig lækkert!