MYSQL-Abfrage nach Tabellennamen über mehrere Tabellen

philomatique

Grünschnabel
Hallo,

ich hoffe, dass das Forum OK ist mit meinem Anliegen oder ob es doch in den DB-Bereich gehört.

Das Problem:

Ich habe mehrere Tabellen "tabelle_1", "tabelle_2", "tabelle_3" die alle ein Feld "slug_id" besitzen.
Jede dieser "slug_ids" verweist auf einen Eintrag in der tabelle "slug" mit einem dazugehörigen Eintrag.
Jede dieser "slug_ids" kommt definitiv nur einmal irgendwo vor (also nur in "tabelle_1" oder "tabelle_2" usw.).

Jetzt ist meine Frage folgende:

Ich habe eine ID aus der Tabelle "slug" und möchte wissen, welche Eintrag in welcher Tabelle dazugehört.
D.h. ich bräuchte die ID und den Tabellennamen.

Wie würdet Ihr das am geeignetsten abfragen?

Danke und viele Grüße
Phil
 
Zuletzt bearbeitet:
Mit einem UNION auf alle Tabellen

So kriegst du mal alle Beziehungen
SQL:
SELECT slug_id, 'table1' AS table_name
FROM table1
UNION
SELECT slug_id, 'table2' AS table_name
FROM table2
UNION
SELECT slug_id, 'table3' AS table_name
FROM table3

Und zum Abfragen einer speziefischen id würd ich möglichst tief die Bedinung setzen. Also nicht ers UNION und dann filtern, sondern erst Filtern und dann UNION.
SQL:
SELECT 'table1' AS table_name
FROM table1
WHERE slug_id = {$id}
UNION
SELECT 'table2' AS table_name
FROM table2
WHERE slug_id = {$id}
UNION
SELECT 'table3' AS table_name
FROM table3
WHERE slug_id = {$id};
 
Zuletzt bearbeitet von einem Moderator:
Ich persönlich würde in die Tabelle slug eine Spalte einfügen, z.B. als enum, die angibt, zu welcher Tabelle der jeweils referenzierende Datensatz gehört. Diese kann dann mit einem UPDATE-Statement gefüllt werden. Die Abfrage in einem SELECT ist dann trivial.
 
Hallo,

danke für den Tip mit UNION. Da hätte ich auch selbst drauf kommen können. *argh*

Ich hab mich dann doch für die letztere Variante entschieden. So hatte ich es auch urspünglich
angelegt, dachte aber ich könnte dann etwas Platz sparen. :-)

Danke und viele Grüße
Phil
 
Zurück