Hi!
Ich habe ein Problem bei einer rekursiven Abfrage. Und zwar geht es um ein Freundenetzwerk und ich möchte einen Weg finden, wie man von einem Anfangsfreund zu einem Endfreund kommt (also Freund 1 ist befreundet mit Freund 2 und Freund 2 ist befreundet mit Freund 3).
Bis jetzt probiere ich es so:
Code:
WITH RECURSIVE tempfreunde(freundvon, pfad, tiefe) AS (
SELECT f.freundvon, '1', 1
FROM istbefreundetmit f
WHERE befreundetmit = 1 AND freundschaftsgrad > 1
UNION
SELECT DISTINCT ON (f.freundvon) f.freundvon, pfad || ', ' || f.freundvon, tf.tiefe + 1
FROM istbefreundetmit f, tempfreunde tf
WHERE f.befreundetmit = tf.freundvon AND f.freundschaftsgrad >= 1 AND f.freundvon <> 1 AND tiefe < 6
)
SELECT *
FROM tempfreunde; Leider funktioniert das aber nicht, weil die Abfrage kein Ende findet (habe die Tiefe nur eingebaut, damit PostgreSQL nicht jedes mal bei einem neuen Test abstürzt). Wenn ich den Pfad nicht einbaue klappt es ja wunderbar, aber mit Pfad bekomme ich es irgendwie nicht hin, dass er keine Freunde doppelt einfügt.
Hoffentlich kann mir jemand helfen und sagen wo mein Fehler liegt.
Danke schonmal!
Lesezeichen