SQL & Datenbankprogrammierung
Von: Kalsan, 21.2.2012 11:40 Uhr
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



  1. Antwort von Michael Baumgartner 3
    Re: Alle Felder bestimmter Tabellen nach Ausdruck du.s
    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.
    1 Kommentare
    • von Kalsan 3
      Re^2: Alle Felder bestimmter Tabellen nach Ausdruck du.s
      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
  2. Antwort von Marcus 3
    Re: Alle Felder bestimmter Tabellen nach Ausdruck du.s
    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
    1 Kommentare
    • von Kalsan 3
      Re^2: Alle Felder bestimmter Tabellen nach Ausdruck du.s
      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
  3. Antwort von Dieter Ferdinand 3
    Re: Alle Felder bestimmter Tabellen nach Ausdruck du.s
    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
    1 Kommentare
    • von Kalsan 3
      Re^2: Alle Felder bestimmter Tabellen nach Ausdruck du.s
      Vielen Dank für eure Antworten. Der Befehl JOIN hat mir weitergeholfen.
      lg
      Kalsan