holgipoldi: MySQL, Wert als Feld

Hi,

ich suche einen Ansatz, vielleicht kann mir jemand helfen.

Zwei Tabellen sind vorhanden: TabA und TabB. TabA speichert einen Datensatz erstmal nur mit tabAID ab. TabB hat die Felder tabBID, tabAID, name, value.

TabB sind die Eigenschaften eines Eintrages aus tabA. Nun möchte ich eine Abfrage machen, die den Wert von tabB.name als Feld mit dem Wert tabB.value zurückgibt.

Kann mir da jemand helfen?

gracias
Holger

  1. Hallo,

    Zwei Tabellen sind vorhanden: TabA und TabB. TabA speichert einen Datensatz erstmal nur mit tabAID ab. TabB hat die Felder tabBID, tabAID, name, value.
    TabB sind die Eigenschaften eines Eintrages aus tabA. Nun möchte ich eine Abfrage machen, die den Wert von tabB.name als Feld mit dem Wert tabB.value zurückgibt.

    ich verstehe leider überhaupt nicht, was Du vorhast, was Dein Problem ist.

    Bitte schreibe ein paar Beispieldatensätze beider Tabellen hin, sowie das
    gewünschte Ergebnis - mit der Begründung, warum dies das gewünschte Ergebnis
    ist.

    Kann mir da jemand helfen?

    Wenn Du meinen Ratschlag befolgst, kann man Dir bestimmt helfen.
    Die Datenbank-Artikel von SELFHTML aktuell können Dir wahrscheinlich auch
    weiterhelfen, irgendwie habe ich das Gefühl, dass Du einen JOIN suchst.

    Freundliche Grüße

    Vinzenz

    1. Hallo,

      Bitte schreibe ein paar Beispieldatensätze beider Tabellen hin, sowie das
      gewünschte Ergebnis - mit der Begründung, warum dies das gewünschte Ergebnis
      ist.

      Tabelle 1: entries
       Tabelle 2: properties

      Tabelle 1 Felder: entryID
       Tabelle 2 Felder: propID, entryID, name, value

      Inhalt in Tabelle 1 ist der erste Datensatz mit dem Inkrement (entryID): 1
       Inhalt in Tabelle 2 sind mehrere Datensätze:

      Erster Datensatz in Tabelle 2:

      propID:1, entryID:1, name:farbe, value:blau
        propID:2, entryID:1, name:aggregatzustand, value:flüssig

      Nun soll bei der Abfrage herauskommen:

      propID:1, farbe:blau, aggregatzustand:flüssig

      So?
      Gruß

      1. hätte ich nochmal lesen sollen, Korrektur:

        Nun soll bei der Abfrage herauskommen:

        entryID:1, farbe:blau, aggregatzustand:flüssig

        Die Eigenschaften (mehre pro entryID) sind also in der zweiten Tabelle gespeichert.

        Gruß

      2. Hallo

        Tabelle 1: entries
        Tabelle 2: properties

        Tabelle 1 Felder: entryID
        Tabelle 2 Felder: propID, entryID, name, value

        Inhalt in Tabelle 1 ist der erste Datensatz mit dem Inkrement (entryID): 1

        als Tabelle:

        Tabelle entries:

        entryID
        -------
            1

        propID:1, entryID:1, name:farbe, value:blau
          propID:2, entryID:1, name:aggregatzustand, value:flüssig

        Tabelle properties:

        propID | entryID | name            | value
        -------------------------------------------
            1  |      1  | farbe           | blau
            2  |      1  | aggregatzustand | flüssig

        ist das so schwierig, es tabellarisch hinzuschreiben, die sich leicht lesen läßt?

        korrigiertes Ergebnis aus https://forum.selfhtml.org/?t=174715&m=1147669:

        Nun soll bei der Abfrage herauskommen:
        entryID:1, farbe:blau, aggregatzustand:flüssig

        entryID | farbe | aggregatszustand
        ----------------------------------
             1  | blau  | flüssig

        Wenn aus Werten Spalten werden, so nennt man dies eine Kreuztabellenabfrage.
        MySQL bietet von sich aus keine Unterstützung dafür. Einen Lösungsansatz findest
        Du in Archivpostings von mir, z.B. </archiv/2008/6/t173119/#m1136008>.

        Freundliche Grüße

        Vinzenz

        1. Hallo,

          ist das so schwierig, es tabellarisch hinzuschreiben, die sich leicht lesen läßt?

          Recht hast du. Und du hast das Problem verstanden.

          Da ich das lokal mit einer SQLite-Datenbank mache, hätte ich performance-technisch nicht wirklich Probleme. Ich könnte die Datenbank in mehreren Durchgängen abfragen. Doch können es mitunter 10.000 Entries sein. Zu jedem Entry hätte ich im Durchschnitt 10 Eigenschaften, also 10 Datensätze in der Properties-Tabelle.

          Ich entwickle eine Anwendung in Adobe AIR mit SQLite und JS. Ich kann mir vorstellen, dass bei einer Lösung die Datenbank in mehreren Schritten abzufragen, es zu derber "Wartezeit" kommt. Das will ich vermeiden. Vom sortieren mal ganz abgesehen.

          Das ist der Grund meiner Frage.

          Praktisch muss erstmal geschaut werden, welche Spaltennamen es überhaupt gibt, bzw. in Frage kommen. Denn nicht jeder entry hat die gleiche Anzahl an Eigenschaften. So muss die Ausgabe bei Einträgen ohne eine der vorhanden Eigenschaften in diesem Feld leer sein.

          Ich schau mir das mal an.
          Dank

          korrigiertes Ergebnis aus https://forum.selfhtml.org/?t=174715&m=1147669:

          Nun soll bei der Abfrage herauskommen:
          entryID:1, farbe:blau, aggregatzustand:flüssig

          entryID | farbe | aggregatszustand

          1  | blau  | flüssig

          Wenn aus Werten Spalten werden, so nennt man dies eine Kreuztabellenabfrage.
          MySQL bietet von sich aus keine Unterstützung dafür. Einen Lösungsansatz findest
          Du in Archivpostings von mir, z.B. </archiv/2008/6/t173119/#m1136008>.

          Freundliche Grüße

          Vinzenz