Korbinian Bachl: MYSQL - suchen ?

hio, wie kann man in einer mysqlDB in allen tabellen nach einem wort suchen ? dachte mir sowas in etwa: selet * from * where * like '%such%'; ... das mag er aber nicht, der will immer die where dfenition genau haben..

irgenwelche ideen ?

grüße KOrbinian

  1. hm, ich hab nicht ganz verstanden, welches Problem du jetzt meinst. Meinst du
    a) selecten aus allen Tabellen oder
    b) selecten mit like

    ??

    1. hm, ich hab nicht ganz verstanden, welches Problem du jetzt meinst. Meinst du
      a) selecten aus allen Tabellen oder
      b) selecten mit like

      ??

      beides... ich möchte etas in einer DB finden -> also die gesammte DB nach etwas durchsuchen, und das like eben deswegen da er auch ähnliche sachen anzeigen soll...

      Korbinian

      1. Dann solltest du auf jeden Fall join verwenden
        www.mysql.org gibt dir weitere Auskunft dazu

      2. ich möchte etas in einer DB finden -> also die gesamte DB nach etwas durchsuchen,

        Und was möchtest Du mit dem Ergebnis anfangen? Von welchem Datentyp soll das Ergebnis sein? SQL kann nicht "suchen", sondern nur SQL-Befehle ausführen.

        Du denkst nach dem Konzept einer Suchmaschine. Dafür bräuchtest Du aber zwei Bausteine:
        a) eine Suchanweisung (select ...) und
        b) *ein* Objekt, in dem man suchen kann.
        Das Forum-Archiv funktioniert sehr ähnlich wie Deine Datenbank. Hier ist dieses Objekt die (vom Schwanzabschneider aufgebaute) Indexdatei. Diese enthält den Text aller Postings, zusätzlich aber auch Informationen darüber, woher dieser Text stammt (Name der Posting-Datei, Target innerhalb der Datei usw.).

        Wenn Du eine komplette SQL-Datenbank durchsuchen wollen würdest, dann müßtest Du Dir einen solchen Indexer schreiben. Dieser würde Tabelle für Tabelle und Spalte für Spalte vorgehen und jeweils in seine Index-Tabelle eintragen: (Tabellenname, Spaltenname, Inhalt).

        Nachdem Du diese Tabelle aufgebaut hast, kannst Du in ihr (!) suchen:
        SELECT Tabellenname, Spaltenname from Indextabelle where Inhalt like <suchbegriff> ;

        und das like eben deswegen da er auch ähnliche sachen anzeigen soll...

        Hm, "ähnliche" ist hier ein schwammiger Begriff. Meines Wissens kann LIKE nur relativ primitive wildcards (eben '%'). Unter "ähnliche" würde ich mir etwas sehr viel Komfortableres vorstellen (Stichwort: Hamming-Abstand).

  2. hio, wie kann man in einer mysqlDB in allen tabellen nach einem wort suchen ? dachte mir sowas in etwa: selet * from * where * like '%such%'; ... das mag er aber nicht, der will immer die where dfenition genau haben..

    irgenwelche ideen ?

    grüße KOrbinian

    Hallo, in allen Tabellen gleichzeitig? Das geht schief... jedoch kannst Du in einer Tabelle sehr wohl nach Begriffen in bestimmten Feldern suchen, z.B.:

    SELECT name, vorname FROM adressen
    WHERE name LIKE 'L%'

    zeigt von jedem Record name und vorname sofern der name mit einem 'L' beginnt.

    Weitere Suchmöglichkeiten siehe: http://www.informatik.uni-hamburg.de/Frauen/Admina/Beitraege/DB+WWW/sql-tutor/tuto16.htm

    Viele Grüße, Rolf