Tobias: SELECT-Anseisung gesucht

Ich habe drei Tabellen:

Alle Verknüpfungen Von Benutzer und Gruppen ID's:

user_grp
  ------------
  id
  fk_user
  fk_grp

Alle Gruppen:

grp
  -------------
  id
  name

Alle Verknüpfungen Von Gruppen und deren zugelassene Seiten:

seite_grp
  -------------
  id
  fr_seite
  fk_grp

Ich habe einen bestimmten Benutzer (user) auf einer bestimmten Seite (seite).
Wie bekomme ich mit einer SQL-Abfrage alle Gruppen die sowohl auf die Seite wie auch auf den Benutzer zutreffen?

Ich bin noch nicht sehr routiniert mit SQL. Bitte darum um Verständniss wenn die eine Stupiede Aufgabe war.

mfg Tobias

  1. Hallo!

    Ich habe einen bestimmten Benutzer (user) auf einer bestimmten Seite (seite).
    Wie bekomme ich mit einer SQL-Abfrage alle Gruppen die sowohl auf die Seite wie auch auf den Benutzer zutreffen?

    Welche Spalte hängt mich welcher Spalte zusammen?

    MfG, André Laugks

    --
    L-Andre @ gmx.de
    1. Alle Verknüpfungen Von Benutzer und Gruppen ID's:

      user_grp
        ------------
        id
        fk_user
        fk_grp

      Alle Gruppen:

      grp
        -------------
        id
        name

      Alle Verknüpfungen Von Gruppen und deren zugelassene Seiten:

      seite_grp
        -------------
        id
        fr_seite
        fk_grp

      Ich habe fk_seite und fk_user. Die grp.id hangt mit der user_grp.fk_grp und der seite_grp.fr_grp zusammen.

      Verständlich?

      1. Hallo!

        Ich habe fk_seite und fk_user. Die grp.id hangt mit der user_grp.fk_grp und der seite_grp.fr_grp zusammen.

        Verständlich?

        Mhhh, mal sehen...

        SELECT g.id, g.fk_user, g.fk_grp FROM
          grp AS g
        INNER JOIN
          user_grp AS u ON (g.id=user_grp.fk_grp)
        INNER JOIN
          seite_grp AS s ON (g.id=s.fr_grp);

        Eventuell wird Du noch Gruppieren müßen.

        Schaue Dir auch bitte in der Doku, ich nehme an Du verwendest MySQL, JOINs an.
        http://www.mysql.de/doc/de/JOIN.html

        MfG, André Laugks

        --
        L-Andre @ gmx.de
        1. Danke für die Bemühungen. Auch für den Link.

          weiterhin ein gutes Neues

  2. yo,

    Wie bekomme ich mit einer SQL-Abfrage alle Gruppen die sowohl auf die Seite wie auch auf den Benutzer zutreffen?

    SELECT grp.id, grp.name
    FROM grp, seite_grp, user.grp
    WHERE grp.id = seite_grp.fr_grp AND user_grp.fk_grp = grp.id AND
    (user_grp.fk_user = der_aktuelle_user AND/OR seite_grp.fr_seite = seite_des_user);

    das AND/OR musst du auflösen, je nachdem ob beide bedingungen wahr sein sollen oder eine reicht.

    man könnte die id in der user_grp und seite_grp auch weglassen und den primary key über die zwei spalten bilden. aber das ist geschmackssache.

    Ilja

    1. Herzlichen Dank, es hat tatsächlich funktioniert!

    2. Bitte noch eine Antwort!

      SELECT grp.id, grp.name
      FROM grp, seite_grp, user.grp
      WHERE grp.id = seite_grp.fr_grp AND user_grp.fk_grp = grp.id AND
      (user_grp.fk_user = der_aktuelle_user AND/OR seite_grp.fr_seite = seite_des_user);

      Ich war fast so weit, habe aber abgekürtzt:

      ->WHERE grp.id = seite_grp.fr_grp = user_grp.fk_grp

      Wieso geht das nicht?

      mfg
      Tobias

      1. yo,

        ->WHERE grp.id = seite_grp.fr_grp = user_grp.fk_grp

        Wieso geht das nicht?

        ist ganz einfach syntaktisch falsch. eine bedingung hat ein linkes und ein rechtes argument und einen operator in der mitte. in deinem falle wäre einen argument zugleich rechtes und linkes argument. das geht zwar in vielen fällen der programmierung, nicht aber bei sql. dort musst du mehrere bedigungen durch einen logischen Operator wie AND oder OR verbinden.

        Ilja