MySQL5 - Tabellenname aus Tabelle abfragen

Bongi

Grünschnabel
Hallo zusammen,

ich hab da ein Problem mit einem SQL-Statement. Folgende Beispiel-Tabellen sind gegeben:

Tabelle Mensch:

Ausweisnummer (Int) Primary Key
Herkunftid (Int) Foreign Key von Herkunft.herkunftid
Detailid (Int)

Tabelle Herkunft:

Herkunftid (Int) Primary Key
Herkunftsland (String)
Detailtabelle (String)

Dann gibt es in diesem Beispiel 3 Betrachtungsländer, entsprechend folgende Tabellen:

DetailBayern:

Detailid (Int) Primary Key
Grösse (Int)
Gewicht (Int)

Entsprechend z.B. DetailNRW und DetailBremen.

So, zur Erklärung:

In der Tabelle Mensch werden alle Menschen aus der Datenbank aufgeführt. Jeder hat mit der Ausweißnummer eine eindeutige Identifizierung. Die Herkunft wird über die Tabelle Herkunft geregelt. Dort gibt es Beispielsweise Einträge in Form von

1,Bayern,DetailBayern
2,NordRheinWestfalen,DetailNRW
3,Bremen,DetailBremen

Die Detailid aus der Tabelle Mensch entspricht dabei dem PrimaryKey aus der entsprechenden Detailtabelle.

Jetzt brauche ich ein SQL-Statement, welches mir folgende Daten ausgibt:

1. herkunft.herkunftsland
2. grösse und gewicht aus der entsprechenden Detailtabelle.

Kurzes Datenbeispiel:

Tabelle Mensch:

Ausweisnummer / Herkunftid / Detailid

123 / 1 / 1
234 / 1 / 2
326 / 2 / 1

Tabelle DetailBayern:

Detailid / Größe / Gewicht

1 / 186 / 100
2 / 170 / 60

Tabelle DetailNRW:

Detailid / Größe / Gewicht

1 / 190 / 80


So, die Abfrage nach der Person mit der Ausweisnummer 234 soll demnach folgendes zurückgeben

Bayern / 170 / 60


Ich hoffe ich habe es irgendwie geschafft den Sachverhalt darzustellen... klingt irgendwie sehr kompliziert. Auf jeden Fall brauche ich ein SQL Statement, welches mir die genannten 3 Informationen zurückgibt. Betonung liegt dabei auf EIN SQL Statement. Es darf nur eines sein, nicht mehr!

Jemand ne Idee.. ich verzweifel dadran...

Grüsse, Bongi
 
Auf jeden Fall brauche ich ein SQL Statement, welches mir die genannten 3 Informationen zurückgibt.
Nein. Was du brauchst, ist ein vernünftiges Datenbankschema. Größe und Gewicht würde ich z.B. in die Tabelle Mensch integrieren. Die Detail*-Tabellen fallen somit weg. Und dann gibt's auch keine Probleme mehr, eine entsprechende Abfrage zu basteln.

Grüße,
Matthias
 
So was lößt man imho nicht mit einem sql-statement sondern mit dem script.

es könnte beispielsweise sein, das Gewicht ud Größe zu verchiedenen Zeitpunkten erfaßt werden und man die alten Werte als History benötigt. Dann muss man das natürlich über eine Relation machen.

In diesem Falle würde ich mir ein Objekt Mensch erstellen und mit der Methode get_details versehen.

Dann erzeugst Du in deinem Script lediglich das Objekt Mensch, welches sich aus den entsprechenden Tabellen alle infos holt, die es braucht.

Bsp.:
PHP:
class mensch($id){
    var $details_tabelle = "";
    function mensch($id){
        $sql = "SELECT * FROM mensch WHERE id=".$id."";
        ...
        $this->details_tabelle = $row['herkunft_etc'];
        $this->get_details();
    }
    function get_details(){
        $sql = "SELECT * FROM $this->details_tabelle";
    }
}

In Deinem Script erzeugst Du dann einfach ein Objekt vom Typ Mensch und übergibst die Id.

PHP:
$peter = new mensch(217);
 
Zurück