Hallo Severin,
Dein Schema der relevanten Tabellen mit ein paar Beispieldatensätzen, die ein Ausfiltern ermöglichen, wäre jetzt doch ganz nett.
Mit meinen (jetzt einmal auf die schnelle erstellten) Beispieldaten würde ich zB die Person suchen, die mit 3 und 13 getaggt wurde (test2).
das passt nicht zu Deinen Daten. Ich vermute es fehlt eine zweite Startkategorie und die letzten beiden Datensätze sollten dieser Startkategorie zugeordnet sein.
Da Du prinzipiell beliebig tief schachteln kannst, hast Du ein Problem. Ich schlage Dir zwei verschiedene Lösungsstrategien vor, Du kannst Dir gern noch weitere überlegen.
Du könntest Deine Tabellenstruktur komplett über den Haufen werfen und mit "Nested Sets" arbeiten. Informiere Dich darüber und ob Du die Nachteile, den Verwaltungsoverhead beim Einfügen und Abändern, in Kauf nehmen willst. Wenn die Lesezugriffe bei weitem in der Mehrzahl sind, dann wären Nested Sets eine gute Lösung.
Du könntest Dir andererseits eine Stored Function schreiben, Die Dir zu einem beliebig gewählten Tag den Starttag zurückliefert. Da Du dies rekursiv machen musst, ist es nicht effizient. Ja, Rekursion ist nicht immer effizient.
Freundliche Grüße
Vinzenz