Tabellen verknüpfen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Tabellen verknüpfen

    Hi,

    ich hab da eine Frage zum tabellen verknüpfen(wenn das eher zu brainstorming gehört bitte verschieben ) Die erste zum verknüpfen von Tabellen. Wenn ich z.B 4 Tabelle verknüpfen will, und dabei alle mit der ersten verknüpft sind

    (also Tab1 -- Tab 2, Tab 1--Tab3, Tab 1 --4 ) dann müsste die Anweisung dafür doch wie folgt aussehen (ich hab gleichmal die namen die ich brauche eingesetzt):
    PHP-Code:
    ... FROM    Hausverkabelung 
    LEFT OUTER JOIN Switchold ON 
    (Hausverkabelung.Switch=Switchold.Name)
    LEFT OUTER JOIN Geräteliste ON (Hausverkabelung.MAC_ADRESSE_Node=Geräteliste.MACAdresse)
    LEFT OUTER JOIN DAERaum ON (Hausverkabelung.Kennummer=DAERaum.HVKkennum)
    WHERE DAERaum.Anschluss like '%%$Search%%'"; 
    Oder täusche ich mich da?Ich frage deshalb weil das so bei mir immer abschmiert und ich mir die Ursache nicht erklären kann

  • #2
    abschmiert == kawumm, pc tot?

    ich versteh die abfrage nicht so ganz, hast du u. U. datensätze aus Tab1 bei Tab1 - Tab2, die du bei Tab1 - Tab3 nicht hast?

    probier mal
    Code:
    SELECT *
    FROM
      switchold s 
      RIGHT OUTER JOIN hausverkabelung h
       ON s.name=h.switch
        LEFT OUTER JOIN geraeteliste g
         ON h.mac_adresse_node=g.macadresse
          RIGHT OUTER JOIN hausverkabelung h2
           ON h2.mac_adresse_node=g.macadresse
             LEFT OUTER JOIN daeraum r
              ON h2.kennummer=r.hvkkennum
    WHERE 
      r.anschluss like '%%$Search%%'
      AND
      h2.id=h.id
    ohne gewähr
    Zuletzt geändert von mrhappiness; 27.08.2003, 10:56.
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Ja genau, wenn ich das ausführe steigt mir die cpu und Speicherauslastung auf 100%, solange bis ich eben den Db-Prozess von Hand kille. Will heißen die ganze Kiste ist solange tot.

      Ich hab deinen Vorschlag gerade probiert gehabt, der Effekt ist allerdings der gleiche.

      Ich versteh die abfrage nicht so ganz, hast du u. U. datensätze aus Tab1 bei Tab1 - Tab2, die du bei Tab1 - Tab3 nicht hast?
      Nein eigentlich nicht, ich hab das so geschrieben gehabt, weil ich gelesen hatte dass man auf diese Art Tabellen miteinander verknüpft so wie ich es haben wollte.
      Ursprünglich ist das ganze eine Abfrage aus Access (die den gleichen Effekt hatte), nur wollte ich a) dieses Problem beheben und b) das so schreiben dass da auch jemand ohne groß nachzudenken durchblickt. Hier mal die SQL Anweisung aus dem Access damit man sieht was ich meine:

      PHP-Code:
      SELECT ... (hab ich jetzt ma weggelassen
      FROM Switchold RIGHT JOIN 
      (Geräteliste RIGHT JOIN (Hausverkabelung LEFT JOIN DAERaum ON Hausverkabelung.Kennummer DAERaum.HVKkennum)
       
      ON Geräteliste.MACAdresse Hausverkabelung.[MAC-ADRESSE_Node]) ON Switchold.Name Hausverkabelung.SWITCH; 

      Kommentar


      • #4
        welche tabellen sind wie miteinander verknüpft?
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          Ich glaub ich seh gerade wo ich falsch gedacht hab.

          Ich ging nämlich davon aus dass die Tabellen über die ON Beziehung verknüpft sind. Wenn ich mir aber die Access DB gerade ma anschaue sieht das ganz anders aus.

          Will heißen, ich ging davon aus dass,

          Hausverkabelung mit Switchold über
          Hausverkabelung.Switch=Switchold.Name

          Hausverkabelung mit Geräteliste über
          Hausverkabelung.MAC_ADRESSE_Node=Geräteliste.MACAdresse

          Und Hausverkabelung mit DAERaum über
          Hausverkabelung.Kennummer=DAERaum.HVKkennum
          verknüpft ist.

          Im Access sieht das aber so aus :
          Hausverkabelung mit Switchold über
          H.Kennummer=S.ID

          Hausverkabelung mit Geräteliste über
          H.Kennummer=G.Kennummer

          Und Hausverkabelung mit DAERaum über
          Hausverkabelung.Kennummer=DAERaum.HVKkennum

          Ich glaub da liegt mein Fehler...oder?

          Kommentar


          • #6
            Code:
            SELECT h.kennummer, s.id, g.kennummer, r.hvkkennum
            FROM
              switchold s
              RIGHT OUTER JOIN hausverkabelung h ON h.kennummer=s.id
                LEFT OUTER JOIN geraeteliste g USING (kennummer)
                RIGHT OUTER JOIN hausverkabelung h2 USING (kennummer)
                  LEFT OUTER JOIN daerraum r ON h2.kennummer=r.hvkkennum
            WHERE
              h.kennummer=h2.kennummer
            so sollte es passen

            was steht in den tabellen denn drin und was verknüpfst du da?
            geht das nicht evtl. auch anders?
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Also es funktioniert immer noch nicht.

              Was meinst du mit was in den Tabellen steht? Was genau in meiner Select Anweisung steht?Das wäre folgendes:
              PHP-Code:
               h.Kennummer,
                        
              s.Stack AS s_Stack
                       
              h.PORT
                       
              s.Unit AS s_Unit,
                       
              s.Stack_Mac
                        
              s.Stack_IP AS s_Stack_IP,
                         
              s.Name AS s_Name
                         
              r.Belegt
                       
              s.MAC_Adresse,
                          
              s.IP_Adresse AS s_IP_Adresse
                       
              s.Subnetmask,
                        
              s.Ort
                        
              s.Raum
                       
              s.Typ AS s_Typ
                       
              s.Inv,
                       
              s.Serien_Nr
                       
              s.Lieferant,
                       
              s.Lieferdatum
                       
              s.Bemerkung AS s_Bemerkung
                      
              h.VLAN
                      
              h.SOFTWARE
                       
              s.Kontakt
                       
              h.10_Mb_HD
                       
              h.10_Mb_FD
                       
              h.100_Mb_HD,
                       
              h.100_Mb_FD
                       
              h.1_Gb_FD,
                        
              h.SLOT
                       
              h.Disabled
                       
              h.SWITCH,
                       
              h.Bemerkung AS h_Bemerkung,
                        
              h.MAC_ADRESSE_Node
                       
              h.Gebäude
                       
              r.ANSCHLUSS_TYP
                       
              r.ANSCHLUSS
                       
              r.FOLGEANSCHLUSS,
                       
              r.BEMERKUNG
                       
              r.RAUM
                       
              r.HVKkennum
                       
              g.MACAdresse,
                       
              h.Kabelnummer,
                       
              r.Kabelnummer1,
                       
              r.Kabelnummer2,
                       
              s.ID,
                       
              g.Kennummer 

              Weil generell steht in den tabellen:

              DAERaum: Raumnummer,Telefonnummer,Anschlusstypen,Anschlussbezeichnungen usw.

              Hausverkabelung: Jede Menge Verkabelungsdaten, bsp MAc-Adressen,Ort usw.

              Switchold: Sämtliche Switchdaten

              geräteliste: Sagt ja der Name + entsprechende Details.

              Kommentar


              • #8
                Ich habs mal noch mit jener Methode versucht die ich im Netz gefunden hab.

                PHP-Code:
                 FROM
                  Switchold s
                Hausverkabelung h,Geräteliste g,DAERaum r
                   WHERE h
                .Kennummer=g.Kennummer
                   
                AND h.Kennummer=r.HVKkennum
                   
                AND h.Kennummer=s.ID
                AND  r.ANSCHLUSS like '%%$Search%%'"; 
                Da hängt sich zwar nichts auf, aber so findet er anscheinend auch nix. (Zumindest gibt er nix aus)

                Kommentar


                • #9
                  probier mal die join variante, aber nur mit hausverkabelung und daeraum

                  wenn das geht nimmst du nach und nach weitere tabellen dazu
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    Ok, werde das gleich mal testen.

                    Kommentar


                    • #11
                      Also er hängt sich auch bei den 2 tabellen auf. Sowohl mit LEFT OUTER JOIN als auch mit LEFT JOIN.

                      Kommentar


                      • #12
                        Mit der Variante ohne Joins kann ich 2 Tabellen verknüpfen, aber alsbald ich eine 3. dazu tue, krieg ich kein Ergebnis. Mit Joins hängt die Kiste auch bei 2 Tabellen.

                        Leuchtet mir irgendwie nicht ein warum das nicht funktioniert...

                        Kommentar

                        Lädt...
                        X