Referenzierte Tablle ermitteln

Hallo!

Ich habe zwei MySQL-Tabellen A und B gegeben, wobei eine Spalte von B einen Fremdschluessel auf A.id besitzt, also: B.Spalte references A(id).

Gibt es irgendeine Moeglichkeit ueber ein Kommando herauszufinden, welche Tabelle hinter A steckt, also ob die Tabelle Produkt oder Student oder so heisst?

Ich moechte also ueber einen MySQL-Befehl den Namen der Tabelle herausfinden, auf die verweist wird.

Hab schon „describe B“ und „Show table status DB like ‚B‘“ gemacht, kann daraus aber keine Informationen darueber gewinnen, wie die referenzierte Tabelle heisst.

Bin fuer jeden Hinweis dankbar.
Gruss,
Victor

Hallo,

schau doch einfach in den Systemtabellen nach. In Deinem Fall: FOREIGNKEYS.

Gruß

Peter

Ich sollte vielleicht erwaehnen, dass ein Programm aus der vorliegenden Datenbank-Struktur den Namen der referenzierten Tabelle automatisch ermitteln koennen soll. Deshalb brauch ich irgendeinen SQL-Befehl oder aehnliches, ueber welchen ich den Namen geliefert bekomme, so dass z.B. ein php Skript aus dem Ergebnis dieses Befehls den tabellennamen extrahieren kann.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

auch Systemtabellen sind nur einfache Tabellen. Du kannst jederzeit ein Select darauf machen und das Ergebnis auswerten. Wo liegt Dein Problem?

Gruß

Peter

Mmhh… also ich erklaer vielleicht mal ein bisschen konkreter, wie ich mir das dachte.
Ich hab ein Dropdownmenu auf einer PHP-Seite, welches die Tabellennamen einer Datenbank beinhaltet. Je nachdem welche Tabelle ich auswaehle wird automatisch ein HTML-Formular aus den Tabellendaten generiert. Dabei sollen Spalten, die einen Fremdschluessel darstellen, als Dropdownmenu umgesetzt werden, welches alle Eintraege aus der referenzierten Tabelle enthaelt.

Also zum Beispiel:
Ich generiere ein Formular aus Tabelle B. B beinhaltet die Spalte x, welche einen Fremdschluessel auf Tabelle A darstellt. Dann soll in dem generierten Formular fuer Spalte B.x ein Dropdownmenu entstehen, welches alle Eintraege aus Tabelle A enthaelt.

Meine Frage ist nun: Wie erhaelt mein PHP-Skript die Information, auf welche Tabelle dieser Fremdschluessel B.x verweist?

Da das Ganze fuer beliebige Datenbanken klappen soll, kann ich vorher ja nicht wissen welcher Fremdschluessel worauf verweist. Ich kann ueber „describe Tabelle“ bisher nur erkennen, ob es sich bei einer Spalte um einen Fremdschluessel handelt oder nicht, aber nicht auf welche Tabelle dieser Schluessel verweist.

Ich hoffe, es ist etwas deutlicher geworden, was ich mein. Falls es immer noch so einfach ist, dann bitte ich um etwas Code, weil ich da ziemlich aufm Schlauch stehe.

Trotzdem schonmal Danke fuer die Hilfe.
Gruss,
Gregor

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Gregor,

Wenn Du Datenbankneutral arbeiten willst, brauchst Du eine Abstraktionsebene zwischen der Anwendung und der DB. Meine erste Wahl: Java. Da gibt es ein DataBaseMetaData Objekt, das diese ganzen Informationen über den jeweils spezifischen Treiber holt. PHP kann das nicht (sage ich jetzt mal einfach so) Jedenfalls bis zum Beweis des Gegenteils.

Jede DB hat diese Informationen (Metadaten) in ihren Systemtabellen gespeichert. Bei jeder kommt man durch ein einfaches SELECT an die Information ran. ABER: die Systemtabellen sehen bei jeder DB anders aus. Oracle verwendet z.B. den Systemview ALL_TABLES, um da die Tabellennamen zu speichrn. Die Spalten stehen in ALL_TAB_COLUMNS. Unter Informix hast Du die Systemtabellen systables und syscolumns. MySQL hat TABLES und COLUMNS.
Auch deren Struktur ist verschieden: Oracle hat so sprechende Schlüsselfelder wie table_name und column_name, Informix benutzt eine ID, einen numerischen Wert.

Übrigens ist auch das Ergebnis eines DESCRIBE von DB zu BD unterschiedlich.

Dir wird also nichts anderes übrigbleiben als dir die Struktur der jeweiligen Systemtabellen anzusehen und den Select entsprechend zu modifizieren. Der Aufwand ist geringer als Du denkst.

Gruß

Peter