MySQL, Wert als Feld
holgipoldi
- datenbank
0 Vinzenz Mai0 holgipoldi
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
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
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ß
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ß
Hallo
Tabelle 1: entries
Tabelle 2: propertiesTabelle 1 Felder: entryID
Tabelle 2 Felder: propID, entryID, name, valueInhalt 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
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üssigentryID | 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