MySQL Zeilen als Spalten auslesen

WhiZZler

Chancentod²
ID: 85586
L
6 Mai 2006
588
32
Begrüße!

Mal wieder eine Frage zu MySQL ;)

Ich habe zwei Tabellen:

term_index
term_id | term
1|foo
2|bar
3|blub

element_has_term
site_id | term_id | term_weight
1|foo|0,75
1|bar|0,25
2|blub|1

So soll die Ausgabe aussehen:
site_id|foo|bar|blub
1|0,75|0,25|0
2|0|0|1

Wenn man möchte also praktisch ein Vektor mit den im Index vorhandenen Termen als Dimensionen.

Die Anzahl der Terme in term_index soll Also der Anzahl der Spalten (oder, wenn man das ganze als Vektor betrachtet, Dimensionen) entsprechen. Ist es irgendwie möglich das direkt über MySQL zu lösen? Wäre irgendwie schöner als sich dafür extra etwas schreiben zu müssen. Auch wenn ich wenig Hoffnung habe, dass das direkt in MySQL geht.

Danke im voraus,
MfG,
WhiZZler
 
Und wie kriegt man mit 'nem JOIN die spezifischen Inhalte von X verknüpften Zeilen dynamisch als Spalten?

@WhiZZler:

Ich lasse mich gerne eines besseren belehren, aber ich glaube, das geht so mit reinen MySQL-Mitteln nicht auf effiziente Art und Weise (irgendwie kriegt man das bestimmt hingehackt, aber ob man das wirklich will?). Insofern wird's wohl auf die korrekte Aufbereitung auf PHP-Seite hinauslaufen.
 
Ich habe jetzt auch nochmal intensiver gegooglet und es sieht wirklich so aus, als ob es da keine vernünftige Möglichkeit geben würde. Mit Joins kann man es lösen, wenn die Anzahl der Dimensionen bekannt ist, wobei man dann für jede Dimension auch einen Join braucht.

Ich habe jetzt eine andere, für mich ebenso optimale Lösung gefunden. Das ganze wird in R weiterverarbeitet, um einige statistische Berechnungen durchzuführen. Und in R ist das ganze sehr schön und komfortabel zu lösen.

Falls es wen interessiert: das reshape Package bietet sehr komfortable Methoden, um die Umformung in einer Zeile hinzubekommen. Ist zwar wie häufiger bei R nicht ganz einfach dahinter zu kommen, welche Attribute man wie setzen muss, aber mit irgendwann klappt es schon ;)
 
es gibt bei mysql auch "Filter" mit denen man doppelte "Dimensionen" aus der Menge des Ergebnisses "entfernt, somit nicht angezeigt werden.
Aber wie oben schon erwähnt...

Wer nicht lesen will, oder sich nicht weiterbildet, kann unter Umständen auch zu anderen Methoden greifen und es geht auch umständlich ...

@tleilax:
mit dem richtigen Tabellen "design" würde ich die obigen sachen so nie in einer DB ablegen...
 
Wer nicht lesen will, oder sich nicht weiterbildet, kann unter Umständen auch zu anderen Methoden greifen und es geht auch umständlich ...
Ich frage nochmal aus wirklichem Interesse nach: Wie hilft JOIN hier dabei weiter, dynamisch (so wie es die Tabellenstruktur erlaubt) X Spalten aus X Zeilen zu einer einzigen Zeile zu aggregieren? Wenn man das Query vorher erst umständlich in PHP bauen muss, ist es in meinen Augen keine Lösung in MySQL mehr.

@tleilax:
mit dem richtigen Tabellen "design" würde ich die obigen sachen so nie in einer DB ablegen...
Ich vielleicht auch nicht, aber das spielt doch schlussendlich auch keine Rolle. So ist nunmal die Vorgabe und damit muss man dann halt arbeiten. WhiZZler hat ja schliesslich nicht nach Kritik an der Struktur der Tabellen gefragt sondern nach der konkreten Lösung eines spezifischen Problems...
 
Dass ich die Daten in dieser Form brauche hat sich erst jetzt im Laufe der Arbeit ergeben. Da es aber nur um eine einmalige Analyse geht ist es mir auch relativ egal, ob das jetzt performant und elegant oder eben langsam und umständlich ist. Da ich die Daten aber eh in R brauche finde ich die Lösung so auf jeden Fall zufriedenstellend.
 
Die entsprechende Engines haben Beschränkungen, wie viele Spalten eine Tabelle haben kann. Ich werf jetzt einfach mal in den Raum: Evtl. wird es gefährlich, wenn du ein Result mit Millionen von Spalten haben willst.