Tabelle mit sich selbst verknüpfen

SetoKaiba

Mitglied
Hi zusammen!

Ich brauche ein wenig Hilfe beim Aufbau einer MySQL-Query.
Dass ich nur "ein wenig" weiss ich so genau, weil ich mir sicher bin, dass das Problem einfach zu lösen ist - genau genommen steht es auch irgendwo im MySQL-Handbuch. Nur leider kann ich mich nicht mehr genau an den Abschnitt erinnern. :-(
Schickt mir aber bitte keine Antworten wie "Abschnitt 2.5.4.3" auf Seite 58.339

Aber nun mal zur Sache.
Ich bin auf der Suche nach einer Query, die folgendes Ergebnis liefern sollte:

Tabellen-Struktur:
Felder:
  • id (sollte klar sein)
  • parent_id (die id des "übergeordneten" Datensatzes)
  • ...

Im Feld "parent_id" ist die id eines anderen Datensatzes der selben Tabelle eingetragen (ungefähr so, als ob das eine Tabelle mit den Daten der Angestellten wäre und die "parent_id" enthält die id des Datensatzes des Vorgesetzten).
Nun möchte ich eine Query erstellen, bei der mir (um beim Beispiel mit den Angestellten zu bleiben) gleichzeitig die Daten des Angestellten und auch die Daten des Vorgesetzten angezeigt werden.

Oder, wer es so einfacher versteht, ich möchte mir folgenden Umweg ersparen:

PHP:
<?php
$q = mysql_query ('SELECT * FROM tabelle where id=' . $mitarbeiterid);
$r = mysql_fetch_assoc($q);
$q2 = mysql_query ('SELECT * FROM tabelle where id='.$r['parent_id']);
?>

Ich hoffe, ich konnte mich verständlich ausdrücken und mir kann jemand helfen (wobei ich ziemlich zuversichtlich bin).

Und dann gleich noch eine Frage (wenn ich schon dabei bin).
Gibt es per Verknüpfung auf diese Weise (oder eine andere - für Vorschläge bin ich überaus dankbar) die Komplette Hirarchie-Ebene bis zum obersten Chef ausgegeben zu bekommen (wenn es zum Beispiel 4-5 Chefs gibt), oder muss ich dann doch mehrere Querys anwenden?
 
Wenn es nur eine Stufe hoch geht ist es noch eine einfache Sache
Dazu braucht man ein Join

select * from tabelle as m left join tabelle as c on m.parent_id = c.id where m.id = "4"

die Richtung

wenn es unendliche Stufen hoch gehen soll gibts 2 Möglichkeinen
eie recursive Abfrage (wie dien jetziger Lösungsansatz)
oder du beschäftigst dich mit "nested sets" (was aber ein hoher Aufwand ist)
Letzlich kommts drauf an wie tief dein Abfragestructur ist
bis zur Tiefe 4 würde ich es über eine Recusion lösen :-)
 
Zurück