Avatar billede weiland Nybegynder
30. maj 2002 - 10:54 Der er 7 kommentarer og
1 løsning

Kategorier og underkategorier

Følgende ASP-eksempel viser fodboldhold og deres spillere. Hvad nu hvis oversigten også skal indbefatte fx spillernes børn?
Altså hvordan udvider man eksemplet til at gælde et tredie niveau? Eventuelt vilkårligt mange niveauer?

<%
SQL = "SELECT * FROM Teams, Players " _
        & "WHERE Players.TeamID = Teams.TeamID " _
        & "ORDER BY Teams.TeamName, Players.PlayerName"
Set RS = conn.Execute( SQL )

priorTeam = ""
Do Until RS.EOF
    curTeam = RS("TeamName")
    If curTeam <> priorTeam Then
        If priorTeam <> "" Then
            Response.Write "</UL>"
        End If
        Response.Write "TEAM: " & curTeam & "<UL>"
        priorTeam = curTeam
    End If
    Response.Write "<LI>" & RS("PlayerName")
    RS.MoveNext
Loop
Response.Write "</UL>" ' clean up the tags!
%>
Avatar billede eagleeye Praktikant
30. maj 2002 - 11:01 #1
du kan lave det på samme måde

priorTeam = ""
priorPlayer = ""
Do Until RS.EOF
    curTeam = RS("TeamName")
    If curTeam <> priorTeam Then
        If priorTeam <> "" Then
            Response.Write "</UL>"
        End If
        Response.Write "TEAM: " & curTeam & "<UL>"
        priorTeam = curTeam
    End If

    curPlayer = RS("PlayerName")
    If curPlayer <> priorPlayer Then
        Response.Write "<LI>" & RS("PlayerName")
        priorPlayer = curPlayer
    End If
   
    Response.Write "<LI><LI>" & RS("PlayerBoernsName")
   
    RS.MoveNext
Loop
Response.Write "</UL>" ' clean up the tags!
Avatar billede eagleeye Praktikant
30. maj 2002 - 11:08 #2
du kan også i stedtfor lave det med nogle SQL kald inde i loopet...:

SQL = "SELECT * FROM Teams"
Set RS = conn.Execute( SQL )


Do Until RS.EOF
  Response.Write "TEAM: " & curTeam & "<UL>"

  teamSQL = "SELECT * FROM Players WHERE Players.TeamID = " & RS("teamID")
  Set teamRS = conn.Execute( SQL )
  Do while not teamRS.EOF
    Response.Write "<LI>" & teamRS("PlayerName")
    'Her kan du lave en ny SQL igen som hender born
    SQL = "SELECT * FROM PlayersBorn WHERE PlayersBorn.playerID = " & teamRS("playerID")
    Set plyserBornRS = conn.Execute( SQL )
    Do while not plyserBornRS.EOF
      Response.Write "<LI><LI>" & plyserBornRS("PlayerName")
      plyserBornRS.movenext
    loop
    teamRS.movenext
  loop
   
  Response.Write "</UL>"
  RS.MoveNext
Loop


Håber du kan se ideen..
Avatar billede weiland Nybegynder
30. maj 2002 - 11:16 #3
Tak for svarene, Eagleeye. Mht dit første svar vil jeg dog gerne have dit bud på, hvad SQL-sætningen skal være. Det er især WHERE-klausulen, som jeg ikke rigtig kan finde ud af
Avatar billede eagleeye Praktikant
30. maj 2002 - 11:20 #4
Hvis kolonnen (PlayerBoernsName) ligger i tabellen Player skulle det ikke være noget problem.
Avatar billede weiland Nybegynder
30. maj 2002 - 11:24 #5
Nej, det er netop det. (PlayerBoernsName) er i en tredie tabel, hvor PlayerID er foreign key
Avatar billede eagleeye Praktikant
30. maj 2002 - 11:46 #6
Ja jeg kan se problemmet

Du skal nok sql'en i stkk med dette:

sql = "SELECT teams.TeamName, players.PlayerName, Borns.BornName FROM (teams LEFT JOIN players ON teams.teamID = players.teamID) LEFT JOIN Borns ON players.playerID = Borns.playerID;"
Avatar billede weiland Nybegynder
30. maj 2002 - 13:19 #7
Jeg kunne desværre ikke få dit første eksempel til at fungere i 3 niveauer med 3 tabeller.
Avatar billede weiland Nybegynder
31. maj 2002 - 10:44 #8
Nu fungerer det, og det fungerer glimrende. Tak for det!

strSQL = "SELECT Teams.TeamName, Players.PlayerName, Children.ChildrenName, Children.BirthDate FROM Teams INNER JOIN (Players INNER JOIN Children ON Players.PlayerID = Children.PlayerID_FK) ON Teams.TeamID = Players.TeamID_FK ORDER BY Teams.TeamName, Players.PlayerName, Children.BirthDate;"
       
Set rs = MyConn.Execute(strSQL)

response.write "<table>"

priorTeam = ""
priorPlayer = ""
Do Until rs.eof
    curTeam = rs("TeamName")
    If curTeam <> priorTeam Then
        Response.Write "<tr><td bgcolor=#000000><font color=#FFFFFF><b>"& curTeam &"</b></font></td></tr>"
        priorTeam = curTeam
    End If

    curPlayer = RS("PlayerName")
    If curPlayer <> priorPlayer Then
        Response.Write "<tr><td bgcolor=#f2f2f2><b>"& rs("PlayerName") &"</b></td></tr>"
        priorPlayer = curPlayer
    End If
   
    Response.Write "<tr><td>"& RS("ChildrenName") &"</td></tr>"
   
    RS.MoveNext
Loop

response.write "</table>"
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