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:
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
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
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
Kommentar