Avatar billede lyngedrengen Nybegynder
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.
Avatar billede coltau Juniormester
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.
Avatar billede lyngedrengen Nybegynder
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!
Avatar billede lyngedrengen Nybegynder
17. januar 2002 - 20:21 #3
PS. Jeg håber du fik pointene - jeg klikkede Accepter\" - ellers sig til!
Avatar billede lyngedrengen Nybegynder
17. januar 2002 - 21:35 #4
Hej Coltau!

Glem mit sidste spørgsmål - jeg lavede en left outer join og fik navnene.

Endnu en gang mange tak for hjælpen!

Mvh
Jan
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
Kurser inden for grundlæggende programmering

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