Hallo Encoder,
Ein paar Ansätze.
Die Mehrfachauswahl kriegst du ja z.B. mit DISTINCT weg. Da ists dann egal ob eine PLZ aus einem Bezirk oder aus der direkten Auswahl der PLZs stammt.
Mit Mehrfachauswahl meine ich, dass beliebige Knoten aus der Struktur selektiert werden sollen. Da gibt es von Beginn an schon keine doppelte Auswahl.
Ich würd das vom einfacheren (und langsamen) Weg her aufziehen. Erst mal so machen dass es überhaupt funktioniert und du es nachvollziehen kannst.
Dann kannst du es ja langsam tunen.Du könntest das kleinste Kriterium bestimmen, in deinem Fall die Bezirke. Dann brauchst du nicht tausende PLZs einzeln durchlaufen.
Die kleinsten Kriterien als Auswahl zu nehmen ist prinzipiell schon richtig. Ich würde aber der Menge an Datensätzen wegen gerne nur die wirklich ausgewählten Knoten speichern. Die Datenbank selbst müsste sich dann durch die Query im Baum selbst zurechtfinden.
Wo hast du die Strukturen? Die werden bei wilden Auswahlen kaum alle in einem ellenlangen WHERE stehen?
Vielleicht willst du das ja doch etwas vereinfachen und erst mal nur mit Bezirken arbeiten? Denn für dein Beispiel der Jobsuche, gibt man da wirklich einzelne PLZ an, die man haben will? Vielleicht den Beginn einer PLZ, aber dann würd ich da auch nur eine Möglichkeit zulassen, z.B. 68***.
Die grundlegende Struktur selbst steht natürlich in der Datenbank und dient ja auch nur als "Vorlage". Der Vergleich selbst findet zwischen zwei individuellen Strukturen statt, die auf die "Vorlage" referenzieren. Postleitzahlen deswegen, weil man auch Bereiche angeben können soll, z.B. 10000 - 15000.
LG,
Daniel