Hallo!
Ich stehe momentan vor einem kleineren Problem, zu dem mir nach langem Grübeln noch nicht wirklich eine sinnvolle Lösung eingefallen ist (verwendet werden MySQL & PHP):
Ich habe eine Baumstruktur die in der Datenbank abgebildet wird. Dies ist an und für sich kein Problem, wobei ich mir aber noch nicht ganz sicher bin ob ich entweder auf Parent-IDs oder auf das Nested Set zurückgreife. Ich denke aber dass das Nested Set hier die bessere Wahl ist.
Die Datenbank beinhaltet nun eine fürs erste fixierte Struktur von Ebenen, die zur geografischen Lokalisierung dienen:
Land > Bundesland > Bezirk > Postleizahl
Nun ist es folgendermaßen, dass Bereiche "gematched" werden müssen. Man bekommt eine Ordnermäßige Struktur zum auf und zuklappen, in der man per Checkbox bestimmte Knoten selektieren kann, wobei aber natürlich auch nach Belieben gemischt werden kann. Diese selektierten Knoten werden dann in der Datenbank gespeichert und anschließend mit einer anderen Struktur "gematched".
Die Schwierigkeit für mich besteht nun, die Strukturen korrekt zu vergleichen. Es muss die Query erkennen können, dass z.B. die gespeicherte Postleitzahl eine Teilmenge der zu vergleichenden Struktur ist. Man kann sich das am besten so vorstellen: Firma A sucht Personen im Bundesland X, Person B sagt aber, ich will nur in den Bezirken Y und Z arbeiten, wobei diese Bezirke ja auch von einem anderen Bundesland stammen können. Die Mehrfachauswahl ist dabei auch zu berücksichtigen.
Die Query selbst kann zudem auch nicht eigenständig laufen, da sie Bestandteil einer weiteren komplexen Query ist und ins gesamte Result Set
einfließen muss (Sortierungen, Gruppierungen etc.)
Ist diese Problemstellung überhaupt mit der Datenbank alleine lösbar oder sollte (könnte man überhaupt?) einen Teil über PHP lösen? Der Weg über temporäre Tabellen wäre evtl. eine Möglichkeit, dieser ist mir aber aufgrund der Performance sehr unsympathisch, da es vorallem bei massenweisen Vergleichen wahrscheinlich arge Geschwindigkeitsprobleme geben wird.
Danke für eure Hilfe,
Daniel