Tach auch dedlfix,
In einer DB-Tabelle habe ich eine Menge von Behandlungen, die sind untereinander rekursiv über das Feld 'folgebehandlung_zu' verknüpft.
Das rekursive Absetzen von vielen kleinen Querys gegen die Datenbank ist nicht so günstig. Jedes Mal fallen Absetzen der Query, Ausführen der Abfrage, Ergebnis zurückliefern an. Frage lieber alle Daten im Ganzen ab und durchlaufe dann die beispielsweise in einem Array abgelegte Ergebnismenge.
Theoretisch war mir das schon klar, ich hatte mich jetzt nur so in die "Einzelwert-Version" verbissen, daß ich nicht mehr zurückkam.
SELECT behandlung_id FROM ueb_behandlungen WHERE folgebehandlung_zu='$b_id'
Bist du sicher, dass deine Datenhaltung, so wie sie ist, günstig ist? Der Vorgänger der Behandlung Y ist die Behandlung X. Das erscheint mir von hinten aufgezäumt zu sein.
Ist es auch, im wahrsten Sinne des Wortes. Es trudeln immer noch "Nachbehandlungseinträge" ein, die dann einfach die Referenz auf die Vorbehandlung eingetragen kriegen und man muß die Verknüpfungen nicht durch alle Datensätze schieben...
Gegeben sei eine Datenmenge in einem Array ($behandlungen), dessen Keys die Behandlungen (Behandlungs-IDs) sind und dessen Values die dazugehörenden Nachfolgebehandlungen. (Kann man mit einem einfachen Select behandlung, nachfolger from... abfragen)
Für jede Behandlung wollen wir den nachfolgenden Schwanz durchlaufen, der aus aneinandergehängten Nachfolgebehandlungen besteht, bis irgendwann keine mehr kommt (=0). Das Ergebnis zu jeder ID wird zwischengespeichert ($countNachfolger).
$behandlungen wird als Referenz übergeben - global $behandlungen wäre eine (unschöne) Alternative.
function countBehandlungen(&$behandlungen, $id, $count = 0) { // ist nur "braingetestet"
if ($behandlungen[$id]) // Nachfolger vorhanden?
return countBehandlungen($behandlungen[$id], ++$count); // Abstieg und zählen
else
return $count; // keiner? Ergebnis zurückgeben
}$countNachfolger = array();
foreach ($behandlungen as $id => $unwichtig)
$countNachfolger[$id] = countBehandlungen($behandlungen, $id);
Wunderbar, sorum ist es natürlich sehr elegant...
array_count_values($countNachfolger) liefert dann die geforderten Summen.
Ja, aber...
wenn ich mir array_count_values($countNachfolger) ausgeben lasse, kommt die Gesamtzahl der Behandlungen als einziger Wert im Array. Fehlt da noch was (noch ein Index), oder habe ich da was übersehen?
Danke und
http://www.gruss-aus-essen.de
Maik