Vergabe einer Reihenfolge über mehrere Gruppen hinweg

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

  • Vergabe einer Reihenfolge über mehrere Gruppen hinweg

    Hallo,

    ich sitze vor einem Problem und habe nicht der geringsten, sinnvollen Ansatz für dessen Lösung. Folgende Situation:

    Es gibt x Gruppen mit jeweils y Untergruppen, die wiederum z Untergruppen haben (können, aber nicht müssen) usw. Ein gewöhnlicher Baum (Nested Set Modell).

    Nun können Einträge einer oder mehreren Gruppen zugeordnet werden, jedoch immer nur der untersten Ebene. Sprich, einer Gruppe, welche Untergruppen hat, können keine Einträge zugeordnet werden, sondern eben nur den Untergruppen.

    Innerhalb jeder Gruppe können den Einträgen Ränge vergeben werden, nach denen die Ausgabe sortiert wird.

    Bis dahin ist alles klar und unproblematisch. Wenn nun in der Ausgabe eine Gruppe ausgewählt wird, welche Untergruppen hat, so hat sie natürlich keine eigenen Einträge. In diesem Fall werden (und sollen) ALLE Einträge gelistet werden, die den Untergruppen der gewählten Gruppe gehören.

    Und genau hier entsteht das Problem: wähle ich eine Gruppe mit 20 Untergruppen, von denen wieder jede ein paar Untergruppen hat, in denen sich jeweils zig Einträge befinden, erhalte ich keine kontrollierte Ausgabe, da es ja in jeder Untergruppe einen Eintrag mit dem Rang 1, 2, 3 usw. gibt. Benötigt wird aber eine eigene Vergabe von Rängen für jede (Über)gruppe.

    Ein Beispiel:
    Code:
    Baum
     |
     |-G1
     |  |-UG1
     |  |   |-UUG 1.1
     |  |   |-UUG 1.2
     |  |-UG2
     |  |   |-UUG 2.1
     |  |   |-UUG 2.2
    Klicke ich auf G1, so erhalte ich alle Einträge von UUG 1.1, 1.2, 2.1 und 2.2

    Hier soll es jedoch eine eigene Reihenfolge / Rangordnung geben, welche unabhängig von den Rängen innerhalb der UGs und UUGs ist.

    Beispiel:

    Eintrag E1 befindet sich in der Grupp UUG 1.2 und hat dort Rang 2. Zugleich befindet er sich in der UUG 2.1 und hat dort den Rang 7.

    Eintrag E2 befindet sich in der Gruppe UUG 1.1 und hat dort den Rang 1. Zugleich befindet er sich in der UUG 2.2 und hat dort den Rang 8.

    Würde ich auf G1 klicken, so könnte ich nicht bestimmen, ob E1 vor oder nach E2 erscheint, wobei jeder Eintrag natürlich nur einmal erscheinen darf, was ich durch eine Gruppierung (SQL) erreiche.

    Die Aufgabe besteht nun im Endeffekt darin, sagen zu können, dass z. B.:

    E1 hat in der UUG 1.2 den Rang 2.
    E1 hat in der UUG 2.1 den Rang 7.
    E1 hat in der UG1 den Rang 9.
    E1 hat in der UG2 den Rang 30.
    E1 hat in der G1 den Rang 192.

    Doch wie lässt sich das erreichen, wenn der Eintrag an sich weder der UG1 noch der UG2 noch der G1, sondern ausschließlich den UUGs zugeordnet ist?

    Die Zuordnung und Vergabe der Reihenfolge erfolgt in einer Zwischentabelle.

    tbl_gruppen:
    id, lft, rgt, bez, usw.

    tbl_eintraege:
    id, blah, blah2, usw.

    tbl_zuordnungen:
    id, g_id, e_id, rang

    Nun könnte ich zwar sagen, dass die Einträge auch explizit den Übergruppen zugewiesen werden sollen, wodurch ein entsprechender Eintrag in der tbl_zuordnungen entstehen würde, jedoch ist das leider nicht möglich (die Einträge und Gruppen sowie Zugehörigkeiten werden aus einem WWS importiert). Ich kann dem Kunden auch nicht sagen, dass er dann bei jeder Aktualisierung zig Tausend Einträge neu zweisen soll.

    Hat also jemand eine Idee, wie man das sinnvoller bzw. akzeptabel lösen kann? Es geht jetzt nicht um eine vollständige Lösung mit SQL-Abfragen oder so, sondern lediglich um ein praktizierbares Prinzip; um Denkanstöße.

    Bin für jeden Tipp dankbar.

    pb

  • #2
    Re: Vergabe einer Reihenfolge über mehrere Gruppen hinweg

    Original geschrieben von plastikbaum
    E1 hat in der UUG 1.2 den Rang 2.
    E1 hat in der UUG 2.1 den Rang 7.
    E1 hat in der UG1 den Rang 9.
    E1 hat in der UG2 den Rang 30.
    E1 hat in der G1 den Rang 192.
    Die ersten beiden Zeilen kriegst du bequem aus der Datenbank.

    Die dritte Zeile ist mir nicht zu 100% klar, denn eine direkte Zuordnung von E1 zu UG1 gibt es ja nicht.
    Wenn die dritte Zeile bedeutet, dass in UG 1.1 sieben Einträge stehen (7 + 2 = 9), dann müsstest du in einem weiteren SELECT die Einträge aller UGs zählen, die UG 1 zugeordnet sind, aber UG 1.2 die "älteren Geschwister" sind.

    Dieses Spielchen musst du machen, bis du beim Wurzelelement angekommen bist, die Anzahl an Abfragen hängt also von der Tiefe der Struktur ab.
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Ja, was jedoch nicht dem Kundenwunsch entspricht. Ich habe mal wieder viel Text geschrieben und nicht wirklich erklärt, was Sache ist

      Der Kunde will die Reihenfolge in den einzelnen Gruppen individuell vergeben können.

      E1 ist kein Eintrag von UG1 und auch nicht von G1, sondern nur von UUG 1.2 und UUG 2.1. Dennoch muss er sagen können, dass E1 bei G1 an z. B. 10. Stelle, bei UG1 an 9. Stelle, bei UUG 1.2 an 4. Stelle und bei UUG 2.1 an 107. Stelle stehen soll.

      Wie er die Reihenfolge bei UUG 1.2 und UUG 2.1 vergeben kann, ist klar, denn es sind schließlich "Kinder" dieser Gruppen. Aber wie er die Reihenfolge in den übergeordneten Gruppen definieren soll, entzieht sich leider meiner Fantasie ...

      Kommentar


      • #4
        Wie macht der Kunde es denn in seinem WWS?

        Überzeuge ihn zur Not davon, maximal x Ebenen zu haben und lege dann je Ebene eine Spalte für den Rang an.
        Oder stimme ein Verfahren ab, nach dem Einträge in die Zuordnungstabelle gemacht werden, wenn nicht explizit etwas anderes transferiert wird.
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar

        Lädt...
        X