Variable Tabellen- und Spaltennamen

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

  • Variable Tabellen- und Spaltennamen

    Habe folgendes Problem.

    In der Tabelle "teile" habe ich zwei Spalten in denen die Namen einer anderen Tabelle und deren Spalte eingtragen habe auf die ich verweisen will.
    Nun möchte ich ein Join auf eine Tabelle und ein Spalte machen wobei ich derren Namen aus der Tabelle "teile" in der gleich abfrage beziehen möchte.
    Die Zieltabelle ist somit variabel und ich benötige etwa ein solche ergebniss:

    anzahl | feldname | tabname | bezeichnung
    ---------------------------------------------------------
    89 | great_id | great03 | typ 345
    34 | great_id | motor | 150kw

    usw.

    Habe so eine vorstellung wie hir, die natürlich so nicht funtzt!

    PHP-Code:
    $abfrage "SELECT teile.anzahl, teile.feldname AS feldname, teile.tabname AS tabname, 'tabname'.bezeichnug 
                    FROM teile
                    JOIN 'tabname'
                    ON teile.teile_id='tabname'.'feldname'
                    WHERE teile.anzahl>'0'"
    ;
    $result mysql_query($abfrage); 

    Wie kann ich die Werte aus feldname und tabname als Variablen verwenden?

  • #2
    Das Datenbankschema ist Murks. Beschreib mal bitte, was du abbilden möchtest. Ich bin sicher, es geht auch ohne solche Verrenkungen.

    Kommentar


    • #3
      Ja ist ganz schön Kurks und auch ein wenich gegen SQL-Sinn...

      Ich will von der einen Tabelle zu einer anderen Joinnen, jedoch abhängig vom Inhalt der ersten Tabelle soll die Zieltabelle gwählt werden.

      Richtig wäre es so eine Beziehung in vielle einzelne "Zwischentabellen" zu verlegen, qasi für jede Zieltabelle eine extra Tabelle wo halt die Anzahl der Teile usw. drinsteht.
      Es sind jedoch viele Tabellen dan nötig und ich möchte mit nur einer oder nur sehr wenig Anfragen an mein Ziel kommen und nicht Für jede Tabelle eine Abfrage stellen.

      Kommentar


      • #4
        Was dich zu diesem Unsinn verleitet hat, habe ich mir bereits denken können. Aber aus deinen wenigen (Beispiel-)Daten kann ich nicht schließen, welche Entitäten und Relationen du eigentlich speichern möchtest. Formuliere es doch bitte mal in der Art: "Jedes Auto besteht aus Teilen. Ein Teil kann ein Motor sein oder ein Reifen. Jedes Teil hat die Attribute Hersteller, ..."

        Kommentar


        • #5
          ok vereinfacht:

          Meine ersten Tabelle Autoteilelager in dem die Teileart, die Teilenummer und die Anzahl steht.
          Desweiteren habe ich für jede Teileart eine Tabelle wo dan die Teile stehen mit der Teilenummer und den Eigenschaften.
          So kann in der Tabelle Autoteilelager 10 Motoren aus der Tabelle Motor , 100 Autoreife aus der Tabelle Reifen stehen usw.

          Ein bischen schwer zu erklären.

          Kommentar


          • #6
            Schema:

            typ(id, bezeichnung) <- bezeichnung = (Motor|Reifen|...)
            teil(id, typ_id, ...)
            lager(id, teil_id, ...)


            Beispieldaten:

            typ:
            1, 'Reifen'
            2, 'Motor'

            teil:
            1, 2, ...
            2, 2, ...
            3, 1, ...

            lager:
            1, 2, ...
            2, 3, ...


            Merke: Relationen müssen sich bereits im Schema wiederfinden, nicht erst in den Daten!

            Kommentar


            • #7
              ich vermute du möchtest sowas haben.


              lager:
              lager_id | tabname | spaltenname | teile_id | anzahl
              ----------------------------------------------------------------
              1 | motor | motor_id | 1 | 51
              2 | motor | motor_id | 2 | 45
              3 | reifen | reifen _id | 1 | 445
              4 | getriebe | getriebe_id | 4 | 415


              motor:
              motor_id | gewicht
              ------------------------
              1 | 75
              2 | 120
              3 | 34
              4 | 30


              reifen:
              reifen_id | gewicht
              ------------------------
              1 | 52
              2 | 42
              3 | 25
              4 | 55


              getriebe:
              getriebe_id | gewicht
              ------------------------
              1 | 400
              2 | 50
              3 | 40
              4 | 60


              Nun brauche ich eine Abfrage die mir folgendes ergebnis liefert sollte:

              lager_id | teile_id | anzahl | gewicht
              ----------------------------------------------------------------
              1 | 1 | 51 | 75
              2 | 2 | 45 | 120
              3 | 1 | 445 | 52
              4 | 4 | 415 | 60

              Kommentar


              • #8
                Das ist Unfug.

                Motor, Getriebe und Reifen zeichnen sich in diesem Beispiel alle durch eine Eigenschaft Gewicht aus.

                Dann leg sie auch in einer Tabelle ab:
                id | art | gewicht
                Wobei art dann angibt, ob es sich um einen Motor, ein Getriebe oder einen Reifen handelt (natürlich nicht als Klartext, sondern ebenfalls als ID, die dann auf eine entsprechende Tabelle referenziert).
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  ok das war jetzt klar!
                  das ist ein vereinfachtes beispiel und gewicht ist eins von sehr vielen spalten die sich eigentlich fast alle unterscheiden.

                  Also gibt es nun eine Möglichkeit mit einer art Variable wie ober schon beschrieben innerhalb einer Abfrage zu arbeiten oder vielleicht eine andere Lösung die nicht die Ganze DB auf den Kopf stellt?

                  Kommentar


                  • #10
                    Original geschrieben von IVAN
                    oder vielleicht eine andere Lösung die nicht die Ganze DB auf den Kopf stellt?
                    Dein ganzes Datenmodell steht auf dem Kopf bzw. liegt schief auf der Seite - also stelle es jetzt gerade, bevor du dich zukünftig mit noch größeren daraus resultierenden Problemen rumschlagen musst.
                    das ist ein vereinfachtes beispiel und gewicht ist eins von sehr vielen spalten die sich eigentlich fast alle unterscheiden.
                    Dann normalisiere jetzt vernünftig, und lagere die Eigenschaften in eine eigene Tabelle aus.

                    teile_id | eigenschaft_id | wert
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      Letzter Versuch.

                      Gibt es jemanden der auf MEINE FRAGE eine ANTWORT hat?

                      und bitte nicht noch mehr Kommentare zu meiner DB die noch keiner gesehen hat und sie beurteilen will...
                      was ich hir als Beispiele aufgeführt habe sind lediglich BEISPIELE die nur helfen sollten um mein Problem zu schildern.


                      So also nochmal ganz einfach.
                      Wie kann ich die Alias (oder sonstiges) als Variablen nutzen oder extra Variablen setzten die dafür geeignet wären,
                      um den Inhalt einer eines Feldes in der Abfrage zu nutzen.

                      PHP-Code:
                      $abfrage "SELECT teile.anzahl, teile.feldname AS feldname, teile.tabname AS tabname, 'tabname'.bezeichnug 
                                      FROM teile
                                      JOIN 'tabname'
                                      ON teile.teile_id='tabname'.'feldname'
                                      WHERE teile.anzahl>'0'"
                      ;
                      $result mysql_query($abfrage); 
                      ...ja diese Abfrage geht so nicht aber so in etwa habe ich es mir vorgestellt.

                      PS: Ich möchte doch nur eine Antwort auf meine Frage und nichts anderes, Danke.

                      Kommentar


                      • #12
                        Wie du bereits bemerkt hast, geht das nicht so direkt. Entweder nutzt du MySQL-Variablen - weiß aber nicht ob das klappt - oder du fragst halt vorher die Werte ab und baust die Query mit PHP zusammen.

                        P.S.: Manchmal ist die Lösung des Problems nicht die Lösung des Problems sondern die Beseitigung der Ursache. (Das war mein letztes Wort zu deinem Schema.)

                        Kommentar

                        Lädt...
                        X