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.
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.
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.
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.