Definieren von Namen der Benutzergruppen

  • Hallo liebe Coder


    ich bin noch relativ neu und bastle zurzeit an Team und User Rechten


    Nun ich möchte gerne, damit der "User" weiß welche Rechte er hat, dass ihm der Gruppenname und die Beschreibung dazu angezeigt wird.


    Also ich zeig euch mal meine DB Struktur



    Hier seht ihr die Verteilung der Gruppenrechte


    group_rights.JPG
    Man sieht hier ist für jede Gruppe auch die Rechte eingetragen, das ganze funktioniert als Bool also 1=Ja und 0=Nein
    Ich möchte halt dementsprechend die Beschreibung anzeigen lassen


    user_uebersicht.JPG
    in der User Übersicht sehen Wir benutzername etc + die Rechtegruppe, also die ID. Die ID ist diese aus der Gruppenübersicht, also darauf muss ich beim Auslesen zugreifen


    user_rights.JPG


    parralel hab ich noch die User rechte, unabhängig von den Gruppenrechten.






    Nun ich würde gerne die Gruppennamen richtig auslesen und halt mit Beschreibung anzeigen lassen

  • Wenn ich es richtig verstanden habe ist das nicht mehr als nen Select auf die Gruppen Tabelle eben mit der Gruppen ID vom Nutzer.


    Du kannst es mit 2 Getrennten Selects machen
    (u.g. Selects sind nicht nutzbar, da dafür allerhand angaben fehlen)

    SQL
    SELECT `gruppenId` FROM `nutzer` WHERE id = 1;
    
    
    // Das Ergebnis ausgeben lassen
    
    
    SELECT `bezeichnung`,`beschreibung` FROM `gruppen` WHERE gruppenId = 7; (7 = Ergebnis aus vorherigem Query


    Oder wenn du mit Joins arbeiten willst:


    Bitte denk dran, keins der Beispiele funktioniert so, dafür fehlt die genaue Datenbankstruktur. Kannst dich gerne mal bei mir in Skype melden (oder die DB Struktur hier posten)

    Mit freundlichen Grüßen
    Developer
    Go/Python Developer | ehm. Webdeveloper | Fachinformatiker Anwendungsentwicklung
    Arbeitet in einem cloudigen Umfeld bei einem der größten deutschen Rechenzentrumsbetreibern

  • Wieso ein right-join und kein inner-join , der Syntax ist wesentlich einfacher:


    SQL
    SELECT `gruppen`.`bezeichnung`, `gruppen`.`beschreibung` FROM `gruppen`, `nutzer` WHERE `gruppen`.`gruppenId`= `nutzer`.`id` AND `nutzer`.`id` = 1;
    
    
        Das ist eine zusammengefasste Version von dieser
    
    
        SELECT `gruppen`.`bezeichnung`, `gruppen`.`beschreibung`
        FROM `gruppen`
        JOIN `nutzer`
        ON `gruppen`.`gruppenId`= `nutzer`.`id` AND `nutzer`.`id` = 1;
  • Ein Inner Join ist in meinem BSP oben auch enthalten (Klick auf mehr anzeigen)


    Right oder Left (ist ja in MySQL fast identisch) -Join , da es vielleicht vorkommen kann, das eine der beiden Zeilen leer ist (z.B. Der Nutzer keine Gruppe hat), die dann aber trotzdem angezeigt werden sollen. Kommt hierbei auf den genauen Wunsch natürlich an.

    Mit freundlichen Grüßen
    Developer
    Go/Python Developer | ehm. Webdeveloper | Fachinformatiker Anwendungsentwicklung
    Arbeitet in einem cloudigen Umfeld bei einem der größten deutschen Rechenzentrumsbetreibern

  • Wenn ich es richtig verstanden habe ist das nicht mehr als nen Select auf die Gruppen Tabelle eben mit der Gruppen ID vom Nutzer.


    Du kannst es mit 2 Getrennten Selects machen
    (u.g. Selects sind nicht nutzbar, da dafür allerhand angaben fehlen)

    SQL
    SELECT `gruppenId` FROM `nutzer` WHERE id = 1;
    
    
    // Das Ergebnis ausgeben lassen
    
    
    SELECT `bezeichnung`,`beschreibung` FROM `gruppen` WHERE gruppenId = 7; (7 = Ergebnis aus vorherigem Query

    das reicht mir schon denke ich, mir fehlte dieser kleine denkanstoß


    danke ich denke jetzt komm ich klar :)

  • Dann gewöhne dir aber gleich die Join Methoden von MySQL an.
    Ist unterm strich schneller und du schrebist noch dazu einen sauberen Code

    dafür müsste mir mal jemand erklären Was diese Join Methode ist und was sie bewirkt.


    Das andere ist denke ich für den Anfang verständlicher und für mich glaub ich einfacher zu schreiben

  • Joins sind dafür da zwischen Tabellen zu springen wenn diese Verknüpft sind.


    Zitat aus meinen Schulunterlagen


    Zitat

    Bei normalisierten Datenbanken müssen häufig zwei oder mehrere Tabellen abgefragtwerde, um die gewünschten Informationen zu erhalten. Dabei tritt das Problem auf, die ander Abfrage beteiligten Tabellen logisch miteinander zu verknüpfen. Werden Tabellen ohneeine Verknüpfungsvorschrift in einer Abfrage verbunden, so wird bei der Ausführung derAbfrage das kartesische Produkt gebildet. Dabei wird jede Reihe der einen Tabelle mitjeder Reihe der anderen Tabelle kombiniert. Eine Verknüpfung kann nur dann gelingen,wenn bereits beim Entwurf darauf geachtet wurde, dass sich die Tabellen über dieSchlüsselspalten miteinander verbinden lassen. Die logische Zuordnung einer Tabellenzeileaus Tabelle 1 zu der richtigen Tabellenzeile aus Tabelle 2 wird in der WHERE-Klausel überidentische Werte in Schlüsselspalten hergestellt:tabellenname1.schlüsselspalte = tabellenname2.schlüsselspalteMan bezeichnet diese Verbindung als Equi/Inner-Join. Wird mit der Join-Anweisunggearbeitet (erst ab SQL-92), geschieht dieses in der FROM-Klausel:FROM tabellenname1 INNER JOIN tabellenname2 ONtabellenname1.schlüsselspalte = tabellenname2.schlüsselspalte

    Mit freundlichen Grüßen
    Developer
    Go/Python Developer | ehm. Webdeveloper | Fachinformatiker Anwendungsentwicklung
    Arbeitet in einem cloudigen Umfeld bei einem der größten deutschen Rechenzentrumsbetreibern

  • dafür müsste mir mal jemand erklären Was diese Join Methode ist und was sie bewirkt.
    Das andere ist denke ich für den Anfang verständlicher und für mich glaub ich einfacher zu schreiben

    Ich geb dir mal nen Link zu den ganzen JOIN Arten, da siehst du welche Ergebnismenge bei welchem JOIN zurück kommt.
    Beachte, dass du zum verknüpfen immer eine Spalte brauchst die in beiden Tabellen identisch ist.
    Des Weiteren würde ich für deinen vorschlag einen full outer join vorschlagen, da du alle Ergebnismengen aus beiden Tabellen zurück bekommst.
    Wenn jemand also keine gruppe hat, falls es das geben sollte, so bekommst du einen NULL wert zurück, diesen kannst du ja abfragen.
    Sollte jedem benutzer eine Gruppe zugeordnet sein, wäre ein inner join vom vorteil, da du nur treffende ergebnisse zurück bekommst.


    Kannst dir ja das Bild mal ansehen und versuchen einzelne varianten nachzustellen.
    Zur not hilft google weiter, oder du fragst hier.
    http://m.c.lnkd.licdn.com/mpr/…TJhLTAyNjZiNDBmNDQ3NA.jpg