Alex: Kreuzprodukt mit dritter Tabelle weiterverarbeiten

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

  1. 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

    1. 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

      1. 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

        1. 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