Linuchs: Vorfahren aus Datenbank rekursiv ermitteln?

Beitrag lesen

Hallo Rolf,

welches DBMS, welche Version genau?

Keine Ahnung, wo sehe ich das? phpMyAdmin zeigt dieses:

varchars für Vater und Mutter? Soll das eine Alternative sein für den Fall, dass Du die Eltern nur namentlich hast, aber nicht als Person mit ID?

Genau. Wenn Eltern später angelegt werden, habe ich die id ja noch nicht und ergänze sie von Hand. Später soll Ajax beim Tippen der Namen Vorschläge anbieten.

Du musst auf Maria 10.2 oder höher updaten, damit die möglich sind.

Ich lasse mir ein Angebot kommen, um auf eine virtual machine umzusteigen. Die Miete enthält angeblich Updates, die ich bisher extra zahlen musste.

Du hast dir wieder viel Mühe gemacht, ich war inzwischen auch nicht untätig und ermittle die Vorfahren (noch nicht die Nachfahren) mit einer rekursiven PHP-Funktion

//=======================================================
  function liesMutterVaterId( $lfd, $id, $geschlecht ) {
//=======================================================
  global  $db, $owner_id, $conn_id, $csv_string;
  $q = "
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# name, mutter_id, vater_id
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SELECT
 per1.*
,TIMESTAMPDIFF( YEAR, per1.geb_datum, IF( per1.sterbe_datum IS NULL, CURDATE(), per1.sterbe_datum )) jahre_alt -- alter = geschuetztes Wort
FROM      ".$db[0]['personen']." per1
WHERE     per1.owner_id = '" . $owner_id . "'
AND       per1.id       = '" . addslashes( $id ) . "'
";
  $res_person = @mysql_query( $q, $conn_id ); zeigSqlFehler( $q, $conn_id );
  if ( $row_person = @mysql_fetch_assoc( $res_person )) {
//  echo $lfd . " id=[" . $id . "] name=[" . $row_person['geb_name'] . ", " . $row_person['vor_name'] . "] mutter_id=[" . $row_person['mutter_id'] . "] vater_id=[" . $row_person['vater_id'] . "]<br>";

    $csv_string
   .= $lfd                        .";"
    . $row_person['id']           .";"
    . $row_person['geb_name']     .";"
    . $row_person['vor_name']     .";"
    . $row_person['beruf']        .";"
    . $row_person['geb_datum']    .";"
    . $row_person['geb_ort']      .";"
    . $row_person['sterbe_datum'] .";"
    . $row_person['gestorben']    .";"
    . $row_person['sterbe_ort']   .";"
    . $row_person['jahre_alt']    .";"
    . $id                         .";"  // kind_id, Verweis auf Rechteck HTML-id
    . $geschlecht                       // w (Mutter) über dem Kind-Rechteck, m (Vater) unter dem Rechteck
    . "\n";

    // rekursiver Aufruf dieser Funktion
    if ( $row_person['vater_id'] ) {
      liesMutterVaterId( $lfd."- ", $row_person['vater_id'], "m" );
    }

    // rekursiver Aufruf dieser Funktion
    if ( $row_person['mutter_id'] ) {
      liesMutterVaterId( $lfd."- ", $row_person['mutter_id'], "w" );
    }
    return  $row_person;
  }
}

Den csv_string mit den gefundenen Ahnen übergebe ich javascript, um die Grafik zu erstellen. Das Geschlecht bestimmt, ob die Person oberhalb (Mutter) oder unterhalb (Vater) des Kindes angezeigt wird.

Ist aber noch in Arbeit und Test, kann sich noch ändern.

Gruß, Linuchs