Beziehung zwischen mehreren Tabellen

schutzgeist

Erfahrenes Mitglied
Ich dreh echt noch durch :(
Ich hab hier ne fertige Seite, die in DW erstellt wurde (nicht von mir).
Nun soll ich das ganze für ein neues Projekt abändern.

Ich hab in meiner DB 3 Tabellen die wohl wesentlich für das Ganze sind...

Tabelle: Seite
ID (autowert): z.b 64
ID_Hauptrubik: 17
ID_Subrubrik: 31 (<- wird so wie ich das sehe vom Autowert der Tabelle Subrubriken übernommen)
ID_Produkt: 0
Name: fdggfddfdf
Inhalt: dggdddgdf
Reihenfolge: 1

Tabelle: Subrubriken
ID (autowert): 31
ID_Hauptrubrik: 17
Name: Produktname
Reihenfolge: 1

Tabelle: Produkte
ID (aw): 28
ID_Hauptrubrik: 17
ID_Subrubrik: 31
Name: Produktname 2
Reihenfolge: 1

Nun möchte ich einen bestimmten Bereich neu einbauen den er mir ausgibt.
Und zwar den oben rot markierten...

Ich hab jetzt eine Übersicht die ausgegeben wird, und das soll/muss es rein...

Momentan sieht es so aus:
Produktbereich (-> Übersicht Produkte, Inhalt manuell angelegt)
- Produkt 1 (-> Produktdetails)
- Produkt 2
- usw.
Der momentane Code dafür:
Code:
<div id="Inhalt" style="position:absolute; left:235px; top:233px; width:700px; z-index:9; background-color: #CCCCCC; layer-background-color: #CCCCCC; border: 1px none #000000;"> 
  <p> 
    <%
If ((Auflisten = TRUE) AND (produkte__MMColParam = 0) AND (seiten__MMColParam = 0) AND (seiten_nummer <= 1)) then

  Response.write("<table width='700' cellpadding='0' cellspacing='0'><tr>")

  While ((Repeat3__numRows <> 0) AND (NOT subrubriken.EOF))

  Response.write("<td valign='top'><span id='Auflistung'>") 
  %>
    <a style='font-weight: bold; font-size: 10pt;' href="index.asp?ID_Hauptrubrik=<%=(subrubriken__MMColParam)%>&ID_Subrubrik=<%=(subrubriken.Fields.Item("ID").Value)%>"><%=(subrubriken.Fields.Item("Name").Value)%></a> 
    <% 
  Response.write("<ul>")
  
     Do While ((Repeat5__numRows <> 0) AND (NOT produkte.EOF))
        If (produkte.Fields.Item("ID_Subrubrik").Value = subrubriken.Fields.Item("ID").Value) then
          %>
  </p>
  <li><a href="index.asp?ID_Hauptrubrik=<%=(subrubriken__MMColParam)%>&ID_Subrubrik=<%=(subrubriken.Fields.Item("ID").Value)%>&ID_Produkt=<%=(produkte.Fields.Item("ID").Value)%>"><%=(produkte.Fields.Item("Name").Value)%></a></li>
          <%
          Repeat5__index=Repeat5__index+1
          Repeat5__numRows=Repeat5__numRows-1
          produkte.MoveNext()
        Else
          Exit Do
        End If
      Loop


  Response.write("</ul></span></td>")

  If (Repeat3__index = 2 OR Repeat3__index = 5 OR Repeat3__index = 8 OR Repeat3__index = 11 OR Repeat3__index = 15) then
  Response.write("</tr><tr>")  
  End If
 
  Repeat3__index=Repeat3__index+1
  Repeat3__numRows=Repeat3__numRows-1
  subrubriken.MoveNext()
  Wend

  Response.write("</tr></table>")
  
 If(Not(inhalts_seite.EOF)) then
  Response.write(inhalts_seite.Fields.Item("Inhalt").Value)
 End If

Else
 If(Not(inhalts_seite.EOF)) then
  Response.write(inhalts_seite.Fields.Item("Inhalt").Value)
 End If
End If
%>
</div>

Nun soll aber aus der Auswahl der Link zur Produktübersicht rausfliegen und der Inahlt dieser Seite sofort dargestellt werden...

Produktname
Produktübersicht

Ich kriegs nicht hin :/ Entweder es passiert garnichts, oder ich bekomme Unmengen von Fehlern...

Falls mich jetzt kein Mensch verstanden hat (ich versteh mich ja schon selbst nichtmehr...) kann ich auch noch Screens von der Seite posten :(

Hilfe :(
 

schutzgeist

Erfahrenes Mitglied
Ich glaub ich hab Freitag die Seite kaputt gemacht :suspekt:
Kann sein, dass der Code oben schon fehlerhaft ist...
Muss das ganze heut Vormittag erst mal wieder neu einrichten und hoffen, dass es dann wieder geht... *heul*

Falls ichs hinbekomm, post ich den ganzen Krempel nachher...
 

schutzgeist

Erfahrenes Mitglied
So, scheint wieder zu gehn...

Also, erst mal die SQL Abfragen
Code:
<%
Dim aktuelle_seite
aktuelle_seite = 0
If (Request("ID_Seite") <> "") Then 
  aktuelle_seite = cInt(Request("ID_Seite"))
End If
%>


<%
Dim hauptrubriken_1__MMColParam
hauptrubriken_1__MMColParam = "1"
If (Request("MM_EmptyValue") <> "") Then 
  hauptrubriken_1__MMColParam = Request("MM_EmptyValue")
End If
%>
<%
Dim hauptrubriken_1
Dim hauptrubriken_1_numRows

Set hauptrubriken_1 = Server.CreateObject("ADODB.Recordset")
hauptrubriken_1.ActiveConnection = MM_store_STRING
hauptrubriken_1.Source = "SELECT * FROM Hauptrubrik WHERE Variante = " + Replace(hauptrubriken_1__MMColParam, "'", "''") + " ORDER BY Reihenfolge ASC"
hauptrubriken_1.CursorType = 0
hauptrubriken_1.CursorLocation = 2
hauptrubriken_1.LockType = 1
hauptrubriken_1.Open()

hauptrubriken_1_numRows = 0
%>
<%
Dim hauptrubriken_2__MMColParam
hauptrubriken_2__MMColParam = "2"
If (Request("MM_EmptyValue") <> "") Then 
  hauptrubriken_2__MMColParam = Request("MM_EmptyValue")
End If
%>
<%
Dim hauptrubriken_2
Dim hauptrubriken_2_numRows

Set hauptrubriken_2 = Server.CreateObject("ADODB.Recordset")
hauptrubriken_2.ActiveConnection = MM_store_STRING
hauptrubriken_2.Source = "SELECT * FROM Hauptrubrik WHERE Variante = " + Replace(hauptrubriken_2__MMColParam, "'", "''") + " ORDER BY Reihenfolge ASC"
hauptrubriken_2.CursorType = 0
hauptrubriken_2.CursorLocation = 2
hauptrubriken_2.LockType = 1
hauptrubriken_2.Open()

hauptrubriken_2_numRows = 0
%>
<%
Dim subrubriken__MMColParam
subrubriken__MMColParam = "10" ' HIER MUSS DIE ID STEHEN VON DER RUBRIK DIE ALS ERSTES AUFGERUFEN WIRD
If (Request.QueryString("ID_Hauptrubrik") <> "") Then 
  subrubriken__MMColParam = Request.QueryString("ID_Hauptrubrik")
End If
%>
<%
Dim subrubriken
Dim subrubriken_numRows

Set subrubriken = Server.CreateObject("ADODB.Recordset")
subrubriken.ActiveConnection = MM_store_STRING
subrubriken.Source = "SELECT * FROM Subrubrik WHERE ID_Hauptrubrik = " + Replace(subrubriken__MMColParam, "'", "''") + " ORDER BY Reihenfolge ASC"
subrubriken.CursorType = 0
subrubriken.CursorLocation = 2
subrubriken.LockType = 1
subrubriken.Open()

subrubriken_numRows = 0
%>
<%
Dim produkte__MMColParam
produkte__MMColParam = "0"
If (Request.QueryString("ID_Subrubrik") <> "") Then 
  produkte__MMColParam = Request.QueryString("ID_Subrubrik")
End If
%>
<%
Dim produkte
Dim produkte_numRows

Set produkte = Server.CreateObject("ADODB.Recordset")
produkte.ActiveConnection = MM_store_STRING
produkte.Source = "SELECT * FROM Produkt WHERE ID_Hauptrubrik = " + Replace(subrubriken__MMColParam, "'", "''") + " ORDER BY ID_Subrubrik ASC"
produkte.CursorType = 0
produkte.CursorLocation = 2
produkte.LockType = 1
produkte.Open()

produkte_numRows = 0
%>
<%
Dim seiten__MMColParam
seiten__MMColParam = "0"
If (Request.QueryString("ID_Produkt") <> "") Then 
  seiten__MMColParam = Request.QueryString("ID_Produkt")
End If
%>
<%
Dim seiten
Dim seiten_numRows

Set seiten = Server.CreateObject("ADODB.Recordset")
seiten.ActiveConnection = MM_store_STRING
seiten.Source = "SELECT * FROM Seite WHERE ID_Hauptrubrik = " + Replace(subrubriken__MMColParam, "'", "''") + " AND ID_Subrubrik = " + Replace(produkte__MMColParam, "'", "''") + " AND ID_Produkt = " + Replace(seiten__MMColParam, "'", "''") + " ORDER BY Reihenfolge ASC"
seiten.CursorType = 0
seiten.CursorLocation = 2
seiten.LockType = 1
seiten.Open()

seiten_numRows = 0
%>

<%
If ((aktuelle_seite = 0) AND NOT(seiten.EOF)) Then 
  aktuelle_seite = seiten.Fields.Item("ID").Value
End If
%>
<%
Dim links
Dim links_numRows

Set links = Server.CreateObject("ADODB.Recordset")
links.ActiveConnection = MM_store_STRING
links.Source = "SELECT * FROM Links WHERE ID_Seite = " + Replace(aktuelle_seite, "'", "''") + ""
links.CursorType = 0
links.CursorLocation = 2
links.LockType = 1
links.Open()

links_numRows = 0
%>
<%
Dim inhalts_seite
Dim inhalts_seite_numRows

Set inhalts_seite = Server.CreateObject("ADODB.Recordset")
inhalts_seite.ActiveConnection = MM_store_STRING
inhalts_seite.Source = "SELECT * FROM Seite WHERE ID = " + Replace(aktuelle_seite, "'", "''") + ""
inhalts_seite.CursorType = 0
inhalts_seite.CursorLocation = 2
inhalts_seite.LockType = 1
inhalts_seite.Open()

inhalts_seite_numRows = 0
%>
<%
Dim Anzeige1
Anzeige1 = ""
Dim Anzeige2
Anzeige2 = ""
Dim Anzeige3
Anzeige3 = ""
Dim abstand_anfang
Dim Rubrikbild
Dim Auflisten
Dim Inhalt
Dim seiten_nummer
seiten_nummer=0
%>
<%
Dim Repeat1__numRows
Dim Repeat1__index

Repeat1__numRows = -1
Repeat1__index = 0
hauptrubriken_1_numRows = hauptrubriken_1_numRows + Repeat1__numRows
%>
<%
Dim Repeat2__numRows
Dim Repeat2__index

Repeat2__numRows = -1
Repeat2__index = 0
hauptrubriken_2_numRows = hauptrubriken_2_numRows + Repeat2__numRows
%>
<%
Dim Repeat3__numRows
Dim Repeat3__index

Repeat3__numRows = -1
Repeat3__index = 0
subrubriken_numRows = subrubriken_numRows + Repeat3__numRows
%>
<%
Dim Repeat4__numRows
Dim Repeat4__index

Repeat4__numRows = -1
Repeat4__index = 0
seiten_numRows = seiten_numRows + Repeat4__numRows
%>
<%
Dim Repeat5__numRows
Dim Repeat5__index

Repeat5__numRows = -1
Repeat5__index = 0
produkte_numRows = produkte_numRows + Repeat5__numRows
%>

Dann nochmal der Bereich, in denen mein Hauptproblem angezeigt wird
Code:
<div id="Inhalt" style="position:absolute; left:235px; top:233px; width:700px; z-index:9; background-color: #CCCCCC; layer-background-color: #CCCCCC; border: 1px none #000000;"> 
  <%
If ((Auflisten = TRUE) AND (produkte__MMColParam = 0) AND (seiten__MMColParam = 0) AND (seiten_nummer <= 1)) then

  Response.write("<table width='700' cellpadding='0' cellspacing='0'><tr>")

  While ((Repeat3__numRows <> 0) AND (NOT subrubriken.EOF))

  Response.write("<td valign='top'><span id='Auflistung'>") 
  %>
  <a style='font-weight: bold; font-size: 10pt;' href="index.asp?ID_Hauptrubrik=<%=(subrubriken__MMColParam)%>&ID_Subrubrik=<%=(subrubriken.Fields.Item("ID").Value)%>"><%=(subrubriken.Fields.Item("Name").Value)%></a>
  <% 
  Response.write("<ul>")

      Do While ((Repeat5__numRows <> 0) AND (NOT produkte.EOF))
        If (produkte.Fields.Item("ID_Subrubrik").Value = subrubriken.Fields.Item("ID").Value) then
          %>
          <li><a href="index.asp?ID_Hauptrubrik=<%=(subrubriken__MMColParam)%>&ID_Subrubrik=<%=(subrubriken.Fields.Item("ID").Value)%>&ID_Produkt=<%=(produkte.Fields.Item("ID").Value)%>"><%=(produkte.Fields.Item("Name").Value)%></a></li>
          <%
          Repeat5__index=Repeat5__index+1
          Repeat5__numRows=Repeat5__numRows-1
          produkte.MoveNext()
        Else
          Exit Do
        End If
      Loop


  Response.write("</ul></span></td>")

  If (Repeat3__index = 2 OR Repeat3__index = 5 OR Repeat3__index = 8 OR Repeat3__index = 11 OR Repeat3__index = 15) then
  Response.write("</tr><tr>")  
  End If
 
  Repeat3__index=Repeat3__index+1
  Repeat3__numRows=Repeat3__numRows-1
  subrubriken.MoveNext()
  Wend

  Response.write("</tr></table>")
  
 If(Not(inhalts_seite.EOF)) then
  Response.write(inhalts_seite.Fields.Item("Inhalt").Value)
 End If

Else
 If(Not(inhalts_seite.EOF)) then
  Response.write(inhalts_seite.Fields.Item("Inhalt").Value)
 End If
End If
%>
</div>

Und zu guter letzt doch noch ein paar Screens...
So siehts momentan aus:
Bild 1
Und so sollte es mal aussehen:
Bild 2

Was mir gerade auch noch ein/auffällt...
Sobald es mehr als 3 Subrubriken sind, dann macht er nach der dritten Tabelle in der er wie auf Bild 1 die Punkte auflistet nen Absatz und fängt darunter mit den nä. 3 an.
Hab schon versucht, dass er das nach 2 solcher Tabellen macht... Finds aber im Code nicht :(
 
Zuletzt bearbeitet:

Luzie

Erfahrenes Mitglied
Hi

Hauptrubrik, Subrubrik und Punkt haben eine Beziehung untereinander.
Jetzt weiss ich nicht, ob Du Dich schon beim DB-Design etwas verrannt hast.

Wie dem auch sei, Du brauchst theoretisch nur ein Recordset.
Geh mal in Access und setz die 3 Tabelle in eine Beziehung
ID der Tabelle Hauptrubriken mit id_hauptrubriken der beiden anderen Tabellen. Den SQL-Code kannst du dann im SQL-Statement einsetzen. Musst halt die Filter noch setzen. Du kannst dies auch als Abfrage direkt in Access speichern und die Abfrage anstelle der 3 Tabellen nutzen.

Du hast jetzt alles was Du brauchst in einer Abfrage.

Über der whileschleife setzt Du die Felder (Produktname und dfdff) in Variablen, die nicht innerhalb der Schleife ausgegeben werden soll. .
Dann öffnetst Du die Schleife und packst dort rein, was in die Schleife gehört.
Die angelegten Variablen kannst Du dann an beliebiger Stelle auf Deiner Seite ausgeben.

Wichtig ist, der Wert muss einer Variablen gespeichert sein.
 

schutzgeist

Erfahrenes Mitglied
Luzie hat gesagt.:
Hi

Hauptrubrik, Subrubrik und Punkt haben eine Beziehung untereinander.
Jetzt weiss ich nicht, ob Du Dich schon beim DB-Design etwas verrannt hast.

Wie oben geschrieben ist die Seite nicht von mir.
Ich weiß selbst nicht, wieso der jenige dort überhaupt was gemacht hat...

Luzie hat gesagt.:
Wie dem auch sei, Du brauchst theoretisch nur ein Recordset.
Geh mal in Access und setz die 3 Tabelle in eine Beziehung
ID der Tabelle Hauptrubriken mit id_hauptrubriken der beiden anderen Tabellen. Den SQL-Code kannst du dann im SQL-Statement einsetzen. Musst halt die Filter noch setzen. Du kannst dies auch als Abfrage direkt in Access speichern und die Abfrage anstelle der 3 Tabellen nutzen.

Du hast jetzt alles was Du brauchst in einer Abfrage.

Hm, wenn ich jetzt nur wüsste wie :(
Hab mit Abfragen noch nie was gemacht...

Ich glaub ich gebs auf... die solln sich jemand suchen, der Ahnung davon hat -.-

Trotzdem danke für deine Hilfe.
 

Luzie

Erfahrenes Mitglied
Hi

hmmm...

Was erwartest Du?
Der gepostete Scriptcode ist mit dem Dreamweaver generiert.
Wenn Du da anfängst, den umzubauen, das ist ein Kaos, ganz ehrlich.

Wenn Du es vernünftig und übersichtlich machen willst, dann musst Du es neu schreiben.
Du wirst niemanden finden, der Dir diesen Scriptcode aktualisiert bzw. umschreibt. Dafür ist der auch gar nicht vorgesehen.

Tabellen in Access in eine Beziehung zu setzen, das ist Peanuts. Einfacher kann man es wirklich nicht machen. Wenn Du auf Abfrage geht, kommst Du in einen Assistenten. Du setzt die Tabellen in das Feld und verbindest die erforderlichen IDs. Der Assisten generiert eine Beziehung basierend auf inner join. Später speicherst Du die Abfrage ab und im SQL-Statement Deines Scripts kannst Du den Namen der Abfrage anstelle der Tabelle setzen. Machst den Filter und die Sortierung dazu und fertig.

Man kann die generierte SQL oder die erzeugte Abfrage auch im Dreamweaver verarbeiten.
Weiterhin ist die von mir angesprochen Übergabe von Variablen und Ausgabe derselben einfach Grundlage. Ohne Grundlagen kannst Du weder ein Script verändern noch eines neu schreiben.

Code:
' --- Variable erstellen für Feld Produktname
dim Produktname
Produktname = rs("produktname")

' --- Öffnen der While-Schleife
while not rs.eof

' --- Ausgabe der Felder in der Schleife
Response.write rs("feld") & "<br>" & vbcrlf
rs.movenext
wend

' --- Ausgabe der Variablen Produktname
Response.write produktname

Ich weiss jetzt nicht, was Dich mit der Seite verbindet, ob Du das beruflich machst oder in Deiner Freizeit. Fakt ist aber, dass Du wissen musst, was Du da tust. Wenn Du keine Zeit bzw. Lust hast, Dich da einzuarbeiten, dann müssen sie sich jemand anderes suchen.
 

schutzgeist

Erfahrenes Mitglied
Luzie hat gesagt.:
Ich weiss jetzt nicht, was Dich mit der Seite verbindet, ob Du das beruflich machst oder in Deiner Freizeit. Fakt ist aber, dass Du wissen musst, was Du da tust. Wenn Du keine Zeit bzw. Lust hast, Dich da einzuarbeiten, dann müssen sie sich jemand anderes suchen.
Das ist mir auch klar.
Aber scheins meinem Chef nicht.
Wenns nach ihm ging drückt er mir ein ASP-Buch in die Hand und ich behersche das Zeug nach 2 Wochen im Schlaf :/
Und dass ich nicht weiß, was ich tu, sollte mittlerweile klar sein..
 

Luzie

Erfahrenes Mitglied
Hi

dass Du nicht weisst, was Du da tust, ist nicht Deine Schuld.

Wenn Dein Chef Dir eine solche Aufgabe übergibt, dann muss er Dir die nötige Zeit und Schulung geben, die Du brauchst.

Mein Chef gibt mir auch nicht seine Autoschlüssel und sagt, repariere mal mein Auto, ohne dass er mich vorher durch einige Crashkurse in Automobiltechnik durchgejagd hat. Er weiss, ich kann kaum Automarken unterscheiden. :D

Wenn einem in der Firma die Zeit fehlt, weil man z.B. noch andere Aufgabe zu erledigen hat, Fremdaufgaben, die man nicht gelernt hat, durchzuführen, oder man hat nicht die Zeit dafür, es zu lernen, dann muss man dies sagen und dann muss der Chef hergehen und die Projektarbeit an ein Unternehmen geben, das sich damit auskennt. (Machen Chefs nicht so gerne, kostet ja was :) :) ) oder der Chef muss selber ran.

Das ist jetzt meine Meinung, ist nicht persönlich gegen Dich, ich kann mir Deine Situation sehr gut vorstellen. :)
 
Zuletzt bearbeitet:

Neue Beiträge