Hallo liebe pg’ler,
und zwar habe ich ein Problem, welches ich an folgenden Beispieldaten erläutern möchte:
Als Ausgangslage habe ich vereinfacht folgende Tabelle im postgreSQL erstellt:
Person.id Person.id
1 3
1 101
2 94
3 5
5 3
7 5
10 11
11 13
12 13
94 1
94 3
Weiterhin habe ich mir folgende Query zusammengebastelt, die alle Elternelemente von 1 ausgeben soll, mit der jeweiligen Ebene (bzw. Distanz) und den Pfad dieser Elemente.
with recursive Bekanntenliste (apid, bpid, breadth , path, cycle) as (
select apid, bPid, 1, ARRAY[apid], false
FROM subset
WHERE aPID=1 OR bPID=1
union all
select c.apid, c.bpid,sg.breadth +1, path || c.apid , c.apid=ANY(path)
from subset c, Bekanntenliste sg
where (c.apid=sg.bpid OR c.bpid=sg.apid) AND NOT cycle )
select DISTINCT *
from Bekanntenliste
where (apid <> 1 OR bpid <>1)
order by breadth
Als Ergebnis erscheint nun:
Um jetzt zur eigentlichen Frage zu kommen:
Allerdings ist das Ergebnis nicht ganz richtig, da z.B.: die 7 erst in der Ebene 4 auftaucht, und schon in der Ebene 3 sein müsste. Weiterhin sind auch Elemente doppelt, u.a. 1 - 3 auf Ebene 1 und dann nochmal 1 - 3 auf Ebene 2. Das macht wenig Sinn, oder jedenfalls möchte ich das so nicht haben.
Hat jemand eine Idee?
Viele Grüße,
Kevin