Alle Felder bestimmter Tabellen nach Ausdruck du.s

Liebe Leute,
ich habe eine SQL Datenbank mit den Tabellen tab1, tab2 und tab3. Die Tabellen sind unterschiedlich, aber jede hat einen Eintrag wdate. Nun möchte ich eine Suchfunktion auf meiner Website machen, die in 2 dieser Tabellen in allen Spalten sucht.
Folgendes müsste der Befehl machen:

  • LIKE benutzen, um % und _ zuzulassen
  • In den Tabellen tab1 und tab3 sollen alle Spalten durchsucht werden
  • Das gebündelte Resultat aus beiden Tabellen soll nach wdate sortiert sein
  • In jeder Zeile des Resultats soll ein Feld sein, das dem Namen der Tabelle entspricht, damit man herausfinden kann, woher der Eintrag stammt.

Wie würde so ein Befehl lauten?
lg
Kalsan

Hallo Kalsan,
also ich bin mir nicht sicher, ob ich es verstanden habe: Du möchtest in zwei Tabellen, jeweils in allen Spalten, nach einem Suchbegriff suchen. Auch in wdate ? Das Ergebnis soll was sein, ein Join beider Tabellen oder nur ein Tupel aus wdate und einer Schlüsselspalte ?
Gruß
Erhard

ich habe eine SQL Datenbank mit den Tabellen tab1, tab2 und
tab3. Die Tabellen sind unterschiedlich, aber jede hat einen
Eintrag wdate. Nun möchte ich eine Suchfunktion auf meiner
Website machen, die in 2 dieser Tabellen in allen Spalten
sucht.
Folgendes müsste der Befehl machen:

  • LIKE benutzen, um % und _ zuzulassen
  • In den Tabellen tab1 und tab3 sollen alle Spalten durchsucht
    werden
  • Das gebündelte Resultat aus beiden Tabellen soll nach wdate
    sortiert sein
  • In jeder Zeile des Resultats soll ein Feld sein, das dem
    Namen der Tabelle entspricht, damit man herausfinden kann,
    woher der Eintrag stammt.

Wie würde so ein Befehl lauten?
lg
Kalsan

Salü Erhard,
Ja, in allen Spalten. Das Ergebnis soll ein Join aller durchsuchten Tabellen sein (in diesem Beispiel 2, aber in Echt gegen 10).
lg
Kalsan

Hallo,
erste Frage: Welche Datenbank haben wir denn? SQL Server?

Zweitens: Bitte mal die Struktur der drei Tabellen übersenden…
Am besten als create table script …
Dann gehts weiter…

Gruss zurück…

ich habe eine SQL Datenbank mit den Tabellen tab1, tab2 und
tab3. Die Tabellen sind unterschiedlich, aber jede hat einen
Eintrag wdate. Nun möchte ich eine Suchfunktion auf meiner
Website machen, die in 2 dieser Tabellen in allen Spalten
sucht.
Folgendes müsste der Befehl machen:

  • LIKE benutzen, um % und _ zuzulassen
  • In den Tabellen tab1 und tab3 sollen alle Spalten durchsucht
    werden
  • Das gebündelte Resultat aus beiden Tabellen soll nach wdate
    sortiert sein
  • In jeder Zeile des Resultats soll ein Feld sein, das dem
    Namen der Tabelle entspricht, damit man herausfinden kann,
    woher der Eintrag stammt.

Salü Michael,
Erste Antwort: Bin mir seitens Server nicht ganz sicher, aber ich glaube das heisst MySQL (der Typ Server, der auf XAMPP läuft).
Zweite Antwort: In Wirklichkeit sind es gegen zehn Tabellen mit unzähligen Spalten darin, aber die darf ich nicht online stellen. Hier sind aber genauere Angaben:
Jede Tabelle ist anders und hat eine andere Anzahl Spalten. Folgende Punkte haben alle Tabellen gemeinsam:

  • Die Einträge sind entweder im Format tinyint (boolean), int oder text
  • Jede Tabelle hat eine Spalte, die wdate heisst, und eine Spalte id
  • Es ist keine Zelle leer.
    Ein vereinfachtes Beispiel:
    tab1: id, text, titel, wdate
    Beispieleinträge: 5, Wie geht’s?, Anmache, 2012-05-30
    tab3: id, wdate, verkaufen, titel, beschreibung
    Bsp.Einträge: 62, 2011-05-12, 1, Haus, Schönes Haus mit Garten
    usw.

lg
Kalsan

Hallo Kalsan,

probier’s mal analog dem folgenden Beispiel:

http://aktuell.de.selfhtml.org/artikel/datenbanken/f…

Gruß
Erhard

Salü Erhard,
Ja, in allen Spalten. Das Ergebnis soll ein Join aller
durchsuchten Tabellen sein (in diesem Beispiel 2, aber in Echt
gegen 10).

Danke, das sieht sehr interessant aus.

Also ich würde einen SQL bauen, in dem du alle zu durchsuchenden Felder miteinander konkatenierst und einen eindeutigen Spaltentrenner verwenden, damit du nicht ein falsches ergebnis durch Überschneidungen bekommst, z.B. Select ‚tab1‘ as tabellenname, Spalte1+’|’+Spalte2+’|’+Spalte3… as Suchstring,wdate from tab1 union Select ‚tab2‘ as tabellenname, Spalte1+’|’+Spalte2+’|’+Spalte3… as Suchstring ,wdate
union Select ‚tab3‘ as tabellenname, Spalte1+’|’+Spalte2+’|’+Spalte3… as Suchstring,wdate

Damit würde ich eine temporäre Tabelle befüllen und diese dann mit Like und Wildcards durchsuchen und das Ergebnis entsprechend weiterverarbeiten. Mit Oracle bräuchtest du keine temp. Tabelle, aber ich weiss nicht, ob das auch mit SQL geht, deswegen hier der Umweg.

Folgendes ist noch zu beachten: Alles zum Typ varchar casten, ansonsten kriegst du ein Problem bei verschiedenen Datentypen

Salü Marcus,
Vielen Dank für deine Hilfe, aber leider bin ich mit SQL viel zu wenig vertraut um derart fortgeschrittene Dinge zu tun. Allerdings funktioniert die Lösung mit den OR und der strikten Sektionentrennung gut genug, so dass das Problem mittlerweile als gelöst betrachtet werden kann.
lg
Kalsan

hallo,
ich weiß jetzt nicht, ob deine datenbank die daten direkt zu sammenfassen kann oder du eine hilfstabelle brauchst.

im prinzip brauchst du 3 select-abfragen:
select „tab1“, felder from tab1 where feld like „suche“
für das einfügen in die hilfstabelle setzt du einfach insert into htab davor. die felddefinition muß aber stimmen.

unter access kann man die 3 abfragen direkt mit union kombinieren. allerdings ist eine sortierung erst in einer 2. abfrage möglich.
du müßtest die union-abfrage also als view speichern.

alternativ kann auch dein programm die zurückgelieferten daten weiterverarbeiten.

tschuess

Vielen Dank für eure Antworten. Der Befehl JOIN hat mir weitergeholfen.
lg
Kalsan