mySQL: Per Textfeld, die ID suchen (2x in einer Abfrage?)

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

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];

?>
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
Emanuelle_1982
Mitglied
Beiträge: 535
Registriert: 06.03.2006 18:37
Wohnort: Nümbrecht & Siegen
Kontaktdaten:

Beitrag von Emanuelle_1982 »

Olli Oberhausen hat geschrieben:vielleicht hilft dir folgender Link zu Nested Sets etwas. http://www.klempert.de/nested_sets/artikel/

Die wahrscheinlichst eleganteste Methode theoretisch unendlich tiefe Baumstrukturen zu gestalten.

Gruß, Olli
auch wenn es nicht direkt mit dem Thema zu tun hat - DANKE
der Link ist klasse, super verständlich
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

Emanuelle_1982 hat geschrieben:
Olli Oberhausen hat geschrieben:vielleicht hilft dir folgender Link zu Nested Sets etwas. http://www.klempert.de/nested_sets/artikel/

Die wahrscheinlichst eleganteste Methode theoretisch unendlich tiefe Baumstrukturen zu gestalten.

Gruß, Olli
auch wenn es nicht direkt mit dem Thema zu tun hat - DANKE
der Link ist klasse, super verständlich
Schau Dir die Erklärung noch an:
http://phpperformance.de/nested-sets-hi ... -in-mysql/

Ich habe es dank beiden Links gut umsetzen können.

Das einzige Problem was ich noch habe ist, dass man eigentlich nicht nur Kategorien, sondern auch Artikel/Themen selbst auch in das Nested Set aufnehmen sollte um besser zählen zu können.

Aber damit bekomme ich Probleme mit meinem Datenbankkonzept.

Die Sache mit dem Stammbaum habe ich übrigens immer noch nicht zufriedenstellend lösen können (Nested Sets hilft da nicht). Werde das aber nicht aufgeben.

Gruß
Marc
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
Emanuelle_1982
Mitglied
Beiträge: 535
Registriert: 06.03.2006 18:37
Wohnort: Nümbrecht & Siegen
Kontaktdaten:

Beitrag von Emanuelle_1982 »

@mgutt:
die gerade gepostete Erklärung finde ich nicht so gut, aber das ist ja Geschmackssache, sie entspricht eher meinen Parabeldenken (nimm etwas was du kennst/verstehst und übertrage es auf etwas anderes: in dem Falle der Wurm der da rumkriecht)

[Edited: der Vorschlag zu deinem Problem war auch nicht praktikabel (statt auf Personen auf die Ehen schauen, ein Kind entstammt immer einer Ehe, aber eine Ehe entspringt ja ebenfalls 2 Ehen]


Liebe Grüße
Emma
Antworten

Zurück zu „Coding & Technik“