MYSQL: Left (Outer) Join oder Ich brauche Hilfe

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MYSQL: Left (Outer) Join oder Ich brauche Hilfe

    Ich versuche gerade in PHP ein kleines Skript zum Verwalten von Mitglieder zu schreiben. Im Moment benutze ich dazu 3 Tabellen:

    Tabelle "mitglied": mitgliedsid, vorname....

    Tabelle "gruppe": gruppenid, beschreibung....

    Tabelle "zuordnung": mitgliedsid, gruppenid

    Kursiv habe ich jeweils die Primärschlüssel gemacht. Die letzte Tabelle besteht nur aus den beiden Fremdschlüsseln.

    Ich habe damit jetzt folgendes Problem: auf einer Seite möchte ich die Möglichkeit haben, ein Mitglied zu editieren. Dazu sollen unter den Stammdaten noch Checkboxen mit allen Gruppen sein und bestehende Zuordnung sollen aktive Checkboxen sein.

    Meine bisheriger Ansatz war:
    PHP-Code:
    SELECT gruppe.gruppenidbezeichnungbeschreibungmitgliedsid 
    FROM gruppe LEFT OUTER JOIN zuordnung USING
    (gruppenid
    WHERE mitgliedsid='991'  ORDER BY bezeichnung 
    Damit hatte ich erhofft eine Tabelle zu kriegen, die eine Spalte "mitgliedsid" in der entweder die Mitgliedsnummer oder bei fehlender Zuordnung NULL steht. Dem ist jedoch leider nicht so...

    Als Ergebnis gibts nur die aktiven Zuordnungen. Was übersehe ich dabei?

  • #2
    was meinst du, was WHERE macht? Denk mal nach

    Kommentar


    • #3
      Hi,
      du musst zwischen der where-klausel und den joinbedingungen unterscheiden.
      Join bedingungen filtern genau so wie die whereklausel nur zu einem
      anderen zeitpunkt. Die joinbedingung gibt vor welche elemente der herangejointen
      tabelle mit zur (vorläufigen) ergebnismenge gehören sollen. Da du einen
      left outer join benutzt bekommst du auf jedenfall alle daten aus der "linken"
      tabelle und nur die daten aus der "rechten" tabelle für die die joinbedingung
      erfüllt ist, sonst null. So nun hast du dieses zwischenergebnis und dann kommt
      die where-klausel ins spiel. Die geht noch mal über das zwischen ergebnis und
      extrahiert genau die menge der elemente die den in der where-klausel genannten
      bedingungen genügt.

      Und wenn du dir jetz deine where-klausel anschaust, siehst du auch
      warum du nicht das gewünschte ergebnis erhältst.

      greets
      (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

      Kommentar


      • #4
        OK, das macht Sinn... Hatte ich so nicht drüber nachgedacht...
        PHP-Code:
        SELECT gruppe.gruppenidbezeichnungbeschreibungmitgliedsid
          FROM gruppe LEFT OUTER JOIN 
        (select mitgliedsid,gruppenid from zuordnung where mitgliedsid='991'zuordnung USING(gruppenid)  
          
        ORDER BY bezeichnung 

        Auf jeden Fall funktioniert das

        Kommentar

        Lädt...
        X