In mehrere Tabellen nach einem String suchen

Hallo zusammen,

ich habe eine Fragen und zwar: Ich möchte in mehreren Tabellen nach einem String suchen.

Ich habe folgende Tabellen angelegt:
t_workstation mit den Attributen: id_workstation (PK), hersteller, lieferant, ipadresse, mitarbeiter, garantieende und hostnamen

t_server mit den Attributen: id_server (PK), hersteller, lieferant, ipadresse und hostnamenr, garantieende und hostnamen

t_notebook mit den Attributen: id_server, modell, hersteller, lieferant, ipadresse, mitarbeiter, garantieende und hostnamen

Ich habe nun ein einfaches Formular erstellt, welches dem Benutzer nach einem Suchwort fragt, zum Bespiel hostname. Dies würde dann in der Variablen $suchwort stehen.

Zur Frage: Ich möchte nun gerne in den o.g. Tabellen suchen, wo hostname = $suchwort ist. Als Ergebnis würde ich gerne nur die ids zurückgeliefert bekommen, wo die Bedingung zutrifft.

Ich habe leider keinen Ansatz und bin deshalb über jede Hilfe dankbar.

Danke im voraus.

Gruss
Deskjet87



test=# create table bla1( id int, suche1 text, suche2 text);
CREATE TABLE
test=*# create table bla2( id int, suche1 text, suche2 text);
CREATE TABLE
test=*# copy bla1 from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 1    foo     bar
>> 2    bla     fasel
>> \.
test=*# copy bla2 from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 11   test    fertig
>> \.
test=*# commit;
COMMIT
test=# select 'bla1' as table, id from bla1 where suche1='foo' union all select 'bla2', id from bla2 where suche1='foo';
 table | id
-------+----
 bla1  |  1
(1 row)

test=*# select 'bla1' as table, id from bla1 where suche1='test' union all select 'bla2', id from bla2 where suche1='test';
 table | id
-------+----
 bla2  | 11
(1 row)

Reicht das als Anregung?

Andreas

Hallo Andreas,

danke für deine schnelle Antwort. Leider verstehe ich die Syntax bzw. das vorgehen nicht so richtig. Kannst du das, bitte nur wenn es nicht zu viel Arbeit macht, mal auf meine Tabellen anwenden. Ich glaube dann habe ich eine bessere Chance es zu verstehen.

Das Anlegen der Tabellen und das Formluar sind kein Problem.

Danke und Gruss
Deskjet87

Nein, Du sollst ja was lernen. Das zentrale Element ist das UNION ALL, und das schaust Du Dir nun in der Doku an.

Andreas

Habe jetzt es jetzt soweit geschaft. Meine SELECT Abfrage lautet so:

SELECT id_workstation AS IDS FROM t_workstation WHERE hostname = ‘test1’ UNION ALL SELECT id_server AS IDS FROM t_server WHERE hostname = ‘test1’;

Als Ergebnis bekomme ich nun die richtigen Datensätze angezeigt.

Für Test muss ich jetzt nurnoch die Variable einsetzten.

Vielen Dank für deine Hilfe.

Gruss
Deskjet87

Na also, geht doch. Und falls Du noch wissen willst, in welcher Tabeller der oder die Treffer waren, guggst Du noch mal ganz genau mein Beispiel…

Andreas

Hallo Andreas,

ich habe das nochmal ausprobiert. Leider bekam ich zuerst immer eine Fehlermeldung, dass die Syntax falsch ist.
Die Select Abfrage lautete dabei:

select 't_workstation' as table, id_workstation as ids from t_workstation 
where hostname='test1' union all select 't_server', id_server from t_server
where hostname='test1';

Der Fehler ist eigentlich ganz einfach. Ich habe zum testen erstmal phpmyadmin verwendent und das, interpretiert das “table” nach “t_workstation as” so, als müsse eine Tabelle folgen.

Habe dies nun in

select 't_workstation' as tabelle, id_workstation as ids from t_workstation 
where hostname='test1' union all select 't_server', id_server from t_server
where hostname='test1';

geändert und es funktioniert.

Danke für die Hilfe.

Gruss
Deskjet87

Falsches Forum, gaaanz falsch :frowning:

Hier geht es im PostgreSQL, nicht um MySQL.