MySQL: Join-Tabellenname aus Spalte benutzen

Tommy57

Erfahrenes Mitglied
Hallo,

ich möchte gerne Daten aus Tabellen ziehen, wo Tabellenname und ID sich ebenfalls in einer Tabelle befinden. Mittels PHP und MySQL in 2 Schritten kein Problem, würde es aber gerne in einem Schritt lösen.

Geht das?

Hier mal ein Beispiel, wie die Daten aussehen könnten, die ich von der Attribute-Tabelle bekomme:
1;'country';127
1;'person';1488
1;'person';1491
2;'city';241
2;'location';34215

Nun würde ich gerne alle Elemente mit ID = 1 aus der DB ziehen, mit dem Wert ID = 127 aus der country Tabelle und dem Wert ID = 1488 und Wert ID = 1491 aus der person Tabelle.

Ich frag mich auch, ob dadurch nicht ein Overhead entstehen würde, weil er jede Zeile separat JOINEN müsste, auch wenn es die selbe Tabelle wäre? Es werden wohl in der Regel nur 3 Zeilen sein. Mir fällt aktuell kein Szenario ein, wo es mal hunderte sein könnten.

Ich bin mir auch nicht sicher, ob ich das geschickt gelöst habe!? Da die Attribute immer nach dem selben Schema aufgebaut sind, dachte ich, es wäre so am Besten.

Gruß, Tommy
 
Zuletzt bearbeitet:
Unschön, aber ev. mit einem UNION. Und performant ist sowas sicher nicht.
SQL:
SELECT a.id
FROM
   mytable AS a
   (
     SELECT id, 'country' AS tbl FROM country
     UNION SELECT id, 'person' FROM person
     UNION SELECT id, 'city' FROM city
     -- TODO: weitere Tabellen hinzufügen
   ) AS b,
   (
    -- Anzahl notwendiger Übereinstimmungen ermitteln
     SELECT id, COUNT(*) AS cnt
     FROM mytable
   ) AS c
WHERE
   a.dtbl = b.tbl
   AND a.did = b.id
   AND a.id = c.id
GROUP BY
   a.id
HAVING
   -- überprüfen, ob die Anzahl übereistimmungen stimmt
   COUNT(a.*) = c.cnt
 
Nee, über UNION aller Tabellen ist blöd, weil es viele Tabellen sind und auch große Tabellen. Da kann ich das ganz einfach mit PHP und zwei Statements machen.

Aber vermutlich bilde ich die Attribute schon falsch ab!? Kannst du mir sagen, wie man sowas eigentlich machen würde? Ich weiß nicht, ob es geschickter ist die Attribute über verschiedene Tabellen zu verteilen? Immerhin sind es ja alles Attribute und haben alle nur einen Typ (country, city, person) und einen Wert (die jeweilige ID aus der anderen Tabelle).
 

Neue Beiträge

Zurück