Avatar billede trumf Nybegynder
12. februar 2003 - 11:11 Der er 1 løsning

Udskriv undergrupper til undergrupper

Hej alle

Jeg har 2 tabeller: varegrupper og tilhgrp hvor varegrupper indeholder varegrupper og tilhgrp har to felter: over og under. under er er ID på en undergruppe og over er ID på den som under tilhører.

I varegrupper har jeg harTilh som sættes til on når der indsættes en undergruppe til den og tilhnr som indikerer hvor langt nede i hierakiet den ligger ex 1 = overgruppe 2 = undergruppe 3 = undergruppe til undergruppe osv.

NU vil jeg gerne skrive alle grupperne ud alt efter hvor i hierakiet de ligger. Min kode:

SQLStr = "Select * from varegrupper Where typen = 1 order by indeks, vgnavn"
Set hent = Conn.Execute(SQLStr)
If Not hent.EOF Then
    Do While Not hent.EOF
        response.write("<A HREF=""varer_gruppe_ret.asp?vgID=" & hent("vgID") & """>" & hent("vgnavn") & "</A>")
        If hent("indeks") <> 0 Then
            response.write(" (" & hent("indeks") & ")")
        End If
        response.write("<BR>")
        If hent("harTilh") = "on" Then
            SQLStr2 = "Select Distinct t.over,v.vgID,v.vgnavn,v.indeks,v.harTilh,v.typen,v.tilhnr from tilhgrp t, varegrupper v Where v.typen = 2 AND v.tilhnr = 2 AND t.over = " & hent("vgID") & " order by v.indeks, v.vgnavn"
response.write(SQLStr2 & "<BR>")
            Set hent2 = Conn.Execute(SQLStr2)
            If Not hent2.EOF Then
            Do While Not hent2.EOF
                response.write("&nbsp;&nbsp;<A HREF=""varer_gruppe_ret.asp?vgID=" & hent2("vgID") & """>" & hent2("vgnavn") & "</A>")
                If hent2("indeks") <> 0 Then
                    response.write(" (" & hent2("indeks") & ")")
                End If
                response.write("<BR>")
                If hent2("harTilh") = "on" Then
                    SQLStr3 = "Select Distinct t.over,v.vgID,v.vgnavn,v.indeks,v.harTilh,v.typen,v.tilhnr from tilhgrp t, varegrupper v Where v.typen = 2 AND v.tilhnr = 3 AND t.over = " & hent2("vgID") & " order by v.indeks, v.vgnavn"
response.write(SQLStr3 & "<BR>")
                    Set hent3 = Conn.Execute(SQLStr3)
                    If Not hent3.EOF Then
                    Do While Not hent3.EOF
                        response.write("&nbsp;&nbsp;&nbsp;&nbsp;<A HREF=""varer_gruppe_ret.asp?vgID=" & hent3("vgID") & """>" & hent3("vgnavn") & "</A>")
                        If hent3("indeks") <> 0 Then
                            response.write(" (" & hent3("indeks") & ")")
                        End If
                        response.write("<BR>")
                        If hent3("harTilh") = "on" Then
                            SQLStr4 = "Select Distinct t.over,v.vgID,v.vgnavn,v.indeks,v.harTilh,v.typen,v.tilhnr from tilhgrp t, varegrupper v Where v.typen = 2 AND v.tilhnr = 4 AND t.over = " & hent3("vgID") & " order by v.indeks, v.vgnavn"
response.write(SQLStr4 & "<BR>")
                            Set hent4 = Conn.Execute(SQLStr4)
                            If Not hent4.EOF Then
                            Do While Not hent4.EOF
                                response.write("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF=""varer_gruppe_ret.asp?vgID=" & hent4("vgID") & """>" & hent4("vgnavn") & "</A>")
                                If hent4("indeks") <> 0 Then
                                    response.write(" (" & hent4("indeks") & ")")
                                End If
                                response.write("<BR>")
                                hent4.MoveNext
                            Loop
                            End If
                            Set hent4 = Nothing
                        End If
                        hent3.MoveNext
                    Loop
                    End If
                    Set hent3 = Nothing
                End If
                hent2.MoveNext
            Loop
            End If
            Set hent2 = Nothing
        End If
        hent.MoveNext
    Loop
Else
    response.write("<CENTER>Ingen varegrupper oprettet!</CENTER>")
End If

udskriften ser således ud (incl SQLen):


Bukser
Select Distinct t.over,v.vgID,v.vgnavn,v.indeks,v.harTilh,v.typen,v.tilhnr from tilhgrp t, varegrupper v Where v.typen = 2 AND v.tilhnr = 2 AND t.over = 6 order by v.indeks, v.vgnavn
  Korte bukser
  Snørebånd
Select Distinct t.over,v.vgID,v.vgnavn,v.indeks,v.harTilh,v.typen,v.tilhnr from tilhgrp t, varegrupper v Where v.typen = 2 AND v.tilhnr = 3 AND t.over = 2 order by v.indeks, v.vgnavn
    dibedutter
    plastiksnipper
Select Distinct t.over,v.vgID,v.vgnavn,v.indeks,v.harTilh,v.typen,v.tilhnr from tilhgrp t, varegrupper v Where v.typen = 2 AND v.tilhnr = 4 AND t.over = 3 order by v.indeks, v.vgnavn
      dimser
Sko (3)
Select Distinct t.over,v.vgID,v.vgnavn,v.indeks,v.harTilh,v.typen,v.tilhnr from tilhgrp t, varegrupper v Where v.typen = 2 AND v.tilhnr = 2 AND t.over = 1 order by v.indeks, v.vgnavn
  Korte bukser
  Snørebånd
Select Distinct t.over,v.vgID,v.vgnavn,v.indeks,v.harTilh,v.typen,v.tilhnr from tilhgrp t, varegrupper v Where v.typen = 2 AND v.tilhnr = 3 AND t.over = 2 order by v.indeks, v.vgnavn
    dibedutter
    plastiksnipper
Select Distinct t.over,v.vgID,v.vgnavn,v.indeks,v.harTilh,v.typen,v.tilhnr from tilhgrp t, varegrupper v Where v.typen = 2 AND v.tilhnr = 4 AND t.over = 3 order by v.indeks, v.vgnavn
      dimser

Nu er det bare det, at korte bukser er undergruppe af bukser, men listes også under sko, til trods for, at dens over i tilhgrp er 6 (bukser)
Denne SQL henter korte bukser som undergruppe til sko:
Select Distinct t.over,v.vgID,v.vgnavn,v.indeks,v.harTilh,v.typen,v.tilhnr from tilhgrp t, varegrupper v Where v.typen = 2 AND v.tilhnr = 2 AND t.over = 1 order by v.indeks, v.vgnavn

SQL'en burde virke, men....
Kan nogen hjælpe med et bedre loop eller noget SQL der virker.

På forhånd tak
Avatar billede trumf Nybegynder
15. februar 2003 - 01:11 #1
Ja, det skulle bruged for længe siden, så nu lukker jeg dette spm.

Jeg gjorde dog det, at jeg lavede 2 udtræk i stedet for et for at finde hver undergruppe. Ikke nogen god løsning, men det er dog en løsning :-(
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