Kreuzprodukt mit dritter Tabelle weiterverarbeiten
Alex
- datenbank
Hallo!
Ich möchte gerne in MySQL 5 das Kreuzprodukt aus zwei Tabellen (users, groups) ermitteln. Dabei sollen allerdings nicht nur alle möglichen Paare aus beiden Tabellen erzeugt werden, sondern auch eine dritte Tabelle berücksichtigt werden, in der angegeben ist, welcher User in dieser m:n-Beziehung in welchen Gruppen vertreten ist. Am Ende möchte ich also, bildlich gesprochen, _alle_ User in den Spalten und _alle_ Gruppen in den Zeilen einer Matrix haben. Die Einträge in dieser Matrix könnten beispielsweise 0 (ist nicht Mitglied dieser Gruppe) oder 1 (ist Mitglied dieser Gruppe) sein.
Das Berücksichtigen dieser "Verbindungstabelle" bereitet mir dabei Probleme. Bisher bekomme ich mit
SELECT
g.name gname, g.id gid,
u.name uname, u.id uid
FROM
groups g
CROSS JOIN
users u
alle User-Klassen-Paare. Wie kann ich nun in einer weitere Ergebnisspalte einfließen lassen, welcher User tatsächlich in welcher Gruppe Mitglied ist?
Grüße
Hallo Alex,
Dabei sollen allerdings nicht nur alle möglichen Paare aus beiden Tabellen erzeugt werden, sondern auch eine dritte Tabelle berücksichtigt werden, in der angegeben ist, welcher User in dieser m:n-Beziehung in welchen Gruppen vertreten ist. Am Ende möchte ich also, bildlich gesprochen, _alle_ User in den Spalten und _alle_ Gruppen in den Zeilen einer Matrix haben. Die Einträge in dieser Matrix könnten beispielsweise 0 (ist nicht Mitglied dieser Gruppe) oder 1 (ist Mitglied dieser Gruppe) sein.
mein Minitutorial für Kreuztabellenabfragen sollte Dir die Richtung angeben. Allerdings kann MySQL solch dynamisches SQL nicht ausführen. Sprich: Du solltest Dir Deine Kreuztabellenabfrage in irgendeiner API zusammenbauen, wie z.B:
</archiv/2008/6/t173119/#m1136008>
</archiv/2009/3/t184124/#m1220523>
Freundliche Grüße
Vinzenz
Hallo!
mein Minitutorial für Kreuztabellenabfragen sollte Dir die Richtung angeben. Allerdings kann MySQL solch dynamisches SQL nicht ausführen. Sprich: Du solltest Dir Deine Kreuztabellenabfrage in irgendeiner API zusammenbauen
Ok, danke Dir.
Hätte nicht gedacht, daß es nur so umständlich geht. Ich kann bei vielen Datenbankproblemstellungen vorher nie sagen, ob es nun auf eine relativ kompakte Lösung heinauslaufen wird, an der man ggf. ein paar Stunden herumdenken mußte ... oder eben auf solche Krücken wie hier mit der Kreuztabelle. :-)
Grüße
Hallo,
mein Minitutorial für Kreuztabellenabfragen sollte Dir die Richtung angeben. Allerdings kann MySQL solch dynamisches SQL nicht ausführen. Sprich: Du solltest Dir Deine Kreuztabellenabfrage in irgendeiner API zusammenbauen
Hätte nicht gedacht, daß es nur so umständlich geht.
in MS Access oder mit neueren Versionen des MS SQL Server kannst Du solche Abfragen nativ nutzen, d.h. es sind keine Krücken erforderlich. PostgreSQL, Oracle und Co. ermöglichen es Dir über ihre prozedurale Schnittstelle, in MySQL geht's halt noch nicht. Denke daran, dass aus Werten in Datensätzen Spalten werden, sowas ist nicht trivial.
Freundliche Grüße
Vinzenz
Hallo!
Hätte nicht gedacht, daß es nur so umständlich geht.
in MS Access oder mit neueren Versionen des MS SQL Server kannst Du solche Abfragen nativ nutzen, d.h. es sind keine Krücken erforderlich. PostgreSQL, Oracle und Co. ermöglichen es Dir über ihre prozedurale Schnittstelle, in MySQL geht's halt noch nicht.
Ja, das hab ich Deinen verlinkten Postings zu diesem Thema entnommen ... und mich gleich darauf ein bißchen geärgert, daß ich auf MySQL festgelegt bin. ;-)
Denke daran, dass aus Werten in Datensätzen Spalten werden, sowas ist nicht trivial.
Macht es denn die Sache u. U. einfacher, wenn die Ergebnismenge noch gar nicht die Form einer Kreuztabelle haben müßte sondern "nur" die Informationen zu allen Gruppe-User-Paaren enthielte, die man sich dann selber ein Matrixform puzzlen müßte?
Grüße