Funktion für PHP-Forum: Zahl der Antworten

slackfan

slackfan

König
Hallo,

ich bastele gerade an einem kleinen Forum und komme bei einer Funktion einfach nicht weiter.
Es geht um Folgendes:

Ich suche einen Algorithmus, der berechnet, wie viele Antworten es insgesamt auf einen Forenthread gibt, wobei es möglich sein soll, auf die Antworten zum Thread ebenfalls zu Antworten.

Im ersten Screenshot ist oben links zu sehen, wie es bis jetzt ausschaut. Im Thread "Stimmung" wird auf die zweite Antwort geantwortet woraufhin auf diese Antwort ebenfalls geantwortet wird. (Ist leicht zu verstehen, wenn man es sieht)
Jetzt will ich die Zahl aller Antworten zum Thread "Stimmung" haben.
Unten links ist das Datenbanklayout zu sehen. Jeder Eintrag im Forum hat eine eineindeutige ID. Ist der Eintrag die Threaderöffnung bekommt er die PID (Parent ID) 0. Ist der Eintrag die Antwort auf einen Thread bekommt die PID den Wert der ID des beantworteten Eintrags usw.

Um die Zahl aller Antworten herauszubekommen, habe ich bis dato folgende rekursive Funktion ersonnen:

PHP:
function get_master_thread_responses( $id, $tmp = 0 ) {
	echo $tmp;
	$result = $this->database->arrayQuery("SELECT id FROM forum WHERE pid='".$id."'", SQLITE_ASSOC);
	if(!empty($result)) {
		$tmp += count($result);
		foreach($result as $entry) {
			get_master_thread_responses( $entry['id'], $tmp );
		}
	}
}

Das Ergebnis der Funktion ist in Screenshot 2 zu sehen und rot markiert.

Mein Problem ist jetzt, dass zwar der letzt Wert von $tmp immer der richtige Wert ist, ich aber keinen Ausstiegspunkt für die Funktion definieren kann.

Hat da jemand eine Idee? Vielleicht ist meine Herangehensweise auch nicht richtig, es wäre aber toll, wenn jemand eine Idee hätte.

cu
 
Ohne dass ich es jetzt getestet hätte. aber müsste es nicht so klappen?
PHP:
function get_master_thread_responses( $id ) {
	$tmp = 0;
	$result = $this->database->arrayQuery("SELECT id FROM forum WHERE pid='".$id."'", SQLITE_ASSOC);
	if(!empty($result)) {
		$tmp += count($result);
		foreach($result as $entry) {
			$tmp += get_master_thread_responses( $entry['id'] );
		}
	}
	return $tmp;
}
 
Zurück
Oben