Verfasst: 28.11.2006 02:45
Eine andere Idee, die ich nicht für schön aber akzeptabel halte:
Code: Alles auswählen
<?php
/*
1 = Mutter
2 = Vater
z.B.:
2.1.2 = Vater.(Groß-)Mutter.(Urgroß-)Vater = Urgroßvater, der als Kind eine Tochter hat, die wiederrum die Mutter des Vaters des Kindes ist.
Man könnte auch simpel durchzählen, aber so ist es ein wenig übersichtlicher.
*/
// Alle unsere Einträge aus der Datenbank
$ids = array(1,2,3,4,5,6,7);
// Wie viele Einträgen haben wir
$countids = count($ids);
// Für jeden Eintrag ermitteln wir nun die IDs des Stammbaums und schreiben sie in ein Array
foreach( $ids as $id )
{
$sql = "SELECT mtr, vtr
FROM stammbaum
WHERE id = $id";
$1 = $mtr;
$2 = $vtr;
// Mutter
if ( $1 )
{
$sql = "SELECT mtr, vtr
FROM stammbaum
WHERE id = $1";
$1.1 = $mtr;
$1.2 = $vtr;
// Großmutter
if ( $1.1 )
{
$sql = "SELECT mtr, vtr
FROM stammbaum
WHERE id = $1.1";
$1.1.1 = $mtr;
$1.1.2 = $vtr;
}
// Großvater
if ( $1.2 )
{
$sql = "SELECT mtr, vtr
FROM stammbaum
WHERE id = $1.2";
$1.2.1 = $mtr;
$1.2.2 = $vtr;
}
}
// Vater
if ( $2 )
{
$sql = "SELECT mtr, vtr
FROM stammbaum
WHERE id = $2";
$2.1 = $mtr;
$2.2 = $vtr;
// Großmutter
if ( $2.1 )
{
$sql = "SELECT mtr, vtr
FROM stammbaum
WHERE id = $2.1";
$2.1.1 = $mtr;
$2.1.2 = $vtr;
}
// Großvater
if ( $2.2 )
{
$sql = "SELECT mtr, vtr
FROM stammbaum
WHERE id = $2.2";
$2.2.1 = $mtr;
$2.2.2 = $vtr;
}
}
// Array der Datenbank hinzufügen
$array = array($1, $2, $1.1, $1.2, $2.1, $2.2, $1.1.1, $1.1.2, $1.2.1, $1.2.2, $2.1.1, $2.1.2, $2.2.1, $2.2.2)
$array = serialize($array);
$sql = "UPDATE stammbaum
SET tree = $array
WHERE id = $id";
}
/*
Das wären dann bei 4 Generationen (inkl. Kind) 7 Datenbankabfragen.
6 Generationen benötigen 31 Abfragen. Ich denke die Zahl ist vertretbar
Dazu kommt dann noch das eine Update und man wäre bei max. 32 Datenbankverbindungen.
*/
/*
Stammbaum darstellen:
*/
// ID über die Url ziehen
$id = $_GET['id'];
// Name des Kindes und Baum auslesen
$sql = "SELECT name, tree
FROM stammbaum
WHERE id = $id";
// Datensatz vorbereiten:
$array = unserialize($tree);
$where_ids = implode(",", $array);
// Alle Namen des Baumes auslesen
$sql = "SELECT name
FROM stammbaum
WHERE id IN ($where_ids)";
$array = mysql_fetch_array();
$1 = $array[0];
$2 = $array[1];
$1.1 = $array[2];
$1.2 = $array[3];
$2.1 = $array[4];
$2.2 = $array[5];
$1.1.1 = $array[6];
$1.1.2 = $array[7];
$1.2.1 = $array[8];
$1.2.2 = $array[9];
$2.1.1 = $array[10];
$2.1.2 = $array[11];
$2.2.1 = $array[12];
$2.2.2 = $array[13];
?>