Suche aus mehreren Tabellen mit gleichen Spaltennamen

Liverson

Grünschnabel
Hallo Leute,

habe folgendes Problem: habe ein Glossar, für dass es in einer mysql-db für jeden buchstaben im Alphabet eine Tabelle gibt (a, b, c, ......).
In jeder dieser Tabellen gibt es nun die Einträge ID, KEYWORD, DESCRIPTION.

Nun habe ich eine einfache Suchmaske, die den Suchbegriff an die Seite mit der Abfrage übergibt. Es ist mir aber weder mit der unscharfen Suche (LIKE) noch mit einer FULLTEXT Suche möglich die Inhalte aller Tabellen abzufragen.
Es kommt immer die Fehlermeldung column in table "ambigous"! Klar die Einträge der verschiedenen Tabellen heißen gleich, aber es muss doch irgendeine Mglichkeit geben so eine Abfrage zu bewerkstelligen. Hat jemand eine Idee

Grüße und vielen Dank im voraus
Liverson
 
Hi

weiss jetzt nicht genau, ob ich das richtig verstanden habe. Aber ich glaube beinahe, das ist nicht der richtige Weg.

Warum nimmst Du 26 Tabellen (a Buchstaben) ? Das ist doch richtig, pro Buchstaben, eine Tabelle?

Wenn Du dieses Construkt zusammenfügen willst, müsstest Du das über die Union-Anweisung naja, das kann man mit 2 oder 3 Tabelle machen aber die Lastigkeit ist einfach zu große.

Die Fehlermeldung rührt vmtl. daher, dass nicht genau verifiziert ist, in welche Spalte er suchen soll, sie heißen ja alle gleich. In dem Fall kann man mit dem Alias arbeiten.

select feld as felda from tabelle

:confused: :confused:
 
Hallo,

vielen Dank erstmal für die schnelle Antwort.
hab nicht so große Erfahrung mit Datenbanken!
Wie würdest du so eine Datenbank dann aufbauen?
 
Hi

grundsätzlich würde ich nur eine Tabellen verwenden und alle Datensätze dort lagern. Es gibt eigentlich keinen für mich ersichtlichen Grund, warum man pro Buchstaben eine Tabelle nimmt :(

Diese würde ich dann filtern z.B. auf einen Suchbegriff, welcher vorkommen kann

bsp.

select * from tabelle where feld like '%suchwort%'

oder eine Vorauswahl treffen z.B. über ein Selectfeld, wonach bestimmte Kategorien aufgelistet sind, welche man dem Datensatz vorab mitgibt

bsp.

select * from tabelle where kategorie = 'Auto' and feld like '%suchwort%'

Oder eine Auswahl treffen z.b. A-G H-M, etc., welche über einen Link übergeben wird, worüber man einen Paramter mitschickt, der z.B. folgende Abfrage auslöst.

select * from tabelle where feld between 'A%' and 'G%'

es gibt noch vieles mehr.

z.B. Eingabe mehrerer Suchbegriffe, und/oder Verknüpfung und und und...

Du wirst das auch mit in Deiner Scriptsprache lösen müssen und die SQL entsprechend dynamisch abfragen, wenn man ein etwas umfangreiches Suchformular haben möchte.

Es kommt da imner darauf an, was für einen Nutzen man aus der Auswahl ziehen möchte.

Eine Union-Abfrage macht für mich dann Sinn, wenn man Tabellen durchsuchen möchte, die eigentlich nichts gemeinsam haben, die aber in einem Statement aufgerufen werden sollen. Ich nutze dies z.B. für eine Gesamtsuche 2er großer Tabellen, eine beinhaltet Weiterbildungsseminare, die andere Dokumente, Berichte und Abhandlungen.

bsp.

select feld, feld1 from tab1 where feld like '%suchwort%'
union
select x as feld, y as feld1 from tab2 where x like '%suchwort%'
 
Hallo Luzie,

vielen Dank für deine umfangreiche Ausführung.
Sehe ich das nun richtig, dass du eine Tabelle anlegen würdest, die nur die Spalten Keyword und Beschreibung besitzt und darin ungeachtet welchen Anfangsbuchstaben die Keword besitzen reingeklopft werden?
Oder würdest du eine Tabelle anlegen, die die Spalten A_Keword, A_Beschreibung, B_Keyword, B_Beschreibung ............ besitzen?

Wahrscheinlich frage ich furchtbar blöde, habe aber wenig Erfahrung mit Datenbanken und deren Aufbau.

Liebe Grüße
Oliver
 
Naja, ich weiss ja nicht, was Du da für Tabellen hast, wofür Du sie nutzen möchtest etc. Deshalb kann ich es auch nur an einem Beipiel erklären, vielleicht wird es für Dich dann klarer.

Ich habe eine Tabelle Seminare.

Diese Tabelle hat mehere Spalten, aber einige wichtige vorweg

ID, Seminartitel, beginn, keyword, kategorie, ....

Mögliche Werte wären

212 | Arbeiten im Reinraum | 12.12.2005 | Reinraum kleidung hygiene | BAT
214 | GMP für die Wirkstoffherstellung | 30.11.2005 | Wirkstoff Hilfsstoff API | SEM

Diese Werte sind für jedes Seminar eindeutig. Es würde nie 2 Beginnspalten geben, es würden nie 2 Kategorien auftauchen, der Titel ist eindeutig und natürlich die ID.

Wie Du siehst, steht in der Keywordspalte nur das wichtige drin, war mit dem Seminar direkt zu tun hat. Diese keywords wiederholen sich auch ggfs. Ich lasse auch nur die Keyword und die Titelspalte durchsuchen.

Dies ist nur ein Beispiel. Ich nutze die Keywordspalte ansonsten weder zur Sortierung noch für andere Dinge, nur lediglich zum Durchsuchen und für die die Metatags, ansosten würde es nicht der 1. Normalform entsprechen.

Es gibt auch die Möglichkeit, eine extra keyword-Tabelle anzulegen und diese mit dem jeweilen Datensatz zu verbinden. Was jetzt Sinn macht, muss man eigentlich immer anhand des Projektes entscheiden, das kann man nicht global sagen. Für mein Beispiel würde es keinen Sinn machen.
 
vielen Dank,

ichc glaub ich habs so ungefähr kapiert und werde versuchen, das Ganze anders aufzubauen und hoffe, dass ichs hinkriege. :-)

LG
Oliver
 
Datenbanken und SQL sind nicht gerade ein triviales Thema. Fehler beim Datenmodell können zu Geschwindigkeitsproblemen und viel zu komplizierten Abfragen führen.
Deshalb würde ich Dir etwas Fachliteratur für den Anfang empfehlen.
Bei http://www.terrashop.de gibt es z.T. sehr günstige Bücher-Angebote. Beispiel: MySQL - Das Praxisbuch, früher: 39,95€ - jetzt nur: 9,95€ und viele andere.
 
Zurück