Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL Join mit 3 Tabellen

Einklappen

Neue Werbung 2019

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

  • MySQL Join mit 3 Tabellen

    Hallo zusammen!

    Ich programmiere und warte die Homepage einer Kommune. Hier benutzen wir für alle Dateien (Bilder, Formulare, etc.) einen Medienpool. Da alle Mitarbeiter in verschiedenen Fachbereichen arbeiten, dürfen auch nicht alle Mitarbeiter auf alle Dateien zugreifen. Und hier fängt das Problem an.

    Ich habe folgende Tabellen:

    medienpool
    id int(5)
    filetype varchar(50)
    filename varchar(200)
    orgfilename varchar(200)
    filesize int(10)
    width int(5)
    height int(5)
    title varchar(200)
    description text
    copyright varchar(200)
    filecat int(5)
    filecat2 int(5)
    createdate int(10)
    createuser int(3)
    archivbit int(2)

    mp_categorie
    id int(5)
    name varchar(20)
    filetype varchar(20)
    categorietype int(5)
    uppercat int(5)
    auth enum('all', 'limited')

    rechte_mp
    id int(10)
    b_id int(3)
    cat_id int(5)

    Ich möchte alle Informationen über die Dateien haben, auf die der User zugreifen darf. Die Dateien sind in Kategorien eingeteilt. Eine Kategorie und eine Unterkategorie. Diese werden in der Tabelle mp_categorie (ich weiß, falsch geschrieben) gespeichert. Zu jeder Datei wird dann im Feld medienpool.filecat und medienpool.filecat2 jeweils die mp_categorie.id eingetragen.
    Der Zugriff wird wie folgt geregelt. In mp_categorie.auth wird entweder ein all oder ein limited für eine Kategorie eingetragen. all bedeutet hier, jeder hat Zugriff auf die Kategorie und limited halt, nicht jeder hat Zugriff auf die Kategorie.
    Für diejenigen, die auf eine "Zugriffbeschränkte" Kategorie zugreifen dürfen, wird pro Kategorie ein Eintrag in rechte_mp erstellt. Inhalt: rechte_mp.b_id BenutzerID, rechte_mp.cat_id die KategorieID.

    Jetzt zur eigentlichen Abfrage: Es soll nachgesehen werden, auf welche Kategorien zugegriffen werden darf und dann die Dateien ausgeben.

    Ich hoffe, ich habe es einigermaßen verständlich erklärt und bedanke mich jetzt schonmal für die mühe!

    Gruß
    quichibo

  • #2
    • Ich würde den Zugriff über eine (bzw. 2) Gruppentabellen lösen. Jeder Benutzer gehört zu einer (oder mehreren) bestimmten Gruppen. Das vereinfacht die Administration.
      Die ID der berechtigten Gruppe übernimmst du dann in die Kategorien-Tabelle.
      Das Attribut auth macht überhaupt keinen Sinn, weise diesen Medien einfach eine Gruppe zu, zu der alle gehören.
      Die Abhängikeiten von Unter- und Überkatgorien ist ja in der Kategorien-Tabelle abgebildet. In die Medientabelle gehört nur eine Kategorie
    Die Abfrage könnte dann etwa so aussehen:
    Code:
    SELECT
    	m.filename,
    	m.title,
    	...,
    	k.name,
    	...
    FROM
    	medienpool m
    INNER JOIN mp_categorie k
    	ON m.filecat = k.id
    INNER JOIN gruppen g
    	ON k.group_id = g.id
    INNER JOIN gruppe_user gu
    	ON g.id = gu.group_id
    INNER JOIN user u
    	ON gu.user_id = i.id
    WHERE u.name = '$user'

    Kommentar


    • #3
      Hallo,

      tja, es hat ein wenig gedauert, bis ich es verstanden hab. Dann hat es noch ein wenig gedauert, bis ich die Tabellen erstellt/umgestellt hab...

      Aber jetzt kann ich sagen, es läuft!


      Vielen Dank dafür!


      Gruß
      quichibo

      Kommentar

      Lädt...
      X