Hagen: SQL und oder?!

Hallo,
ich möchte dem nutzer die möglichkeit geben eine datenbank anhand von suchbegriffen zu durchforsten, und zwar soll einerseits die möglichkeit bestehen das schlüsselwort AND in der suche zu verwenden und andererseits OR.
Kann mir vielleicht jm. eine Beispiel query geben wie man das relisierene kann? Sucheingabe: Xxx AND Yyy OR Zzz

Hoffe ihr könnt mir helfen.
Achja das mit der Wertigkeit von AND und OR krieg ich dann schon hin.

MFG Hagen

  1. ich möchte dem nutzer die möglichkeit geben eine datenbank anhand von suchbegriffen zu durchforsten, und zwar soll einerseits die möglichkeit bestehen das schlüsselwort AND in der suche zu verwenden und andererseits OR.

    Da kommt man mit einer "OR-Maske" und einer "AND-Maske", die "AND-Maske" kann so aussehen:
    "Geben Sie Suchwörter ein" (dann die Textbox nach verschiedenen Wörtern durchsuchen und die WHERE-Klausel aufbauen)
    Die "OR-Maske" kann so aussehen:
    "Geben Sie Suchwörter ein (Geben Sie OR ein wenn Sie ein ODER wünschen)" (dann die Textbox nach verschiedenen Wörtern durchsuchen und die WHERE-Klausel aufbauen)

    Wenn die "OR-Maske" eine andere, eine zweite Textbox darstellt, dann kann auf die Suchsyntax verzichtet werden.

    Eventuell bietest Du dem Nutzer auch gleich ein Editieren der WHERE-Klausel an. Why not?

    1. echo $begrüßung;

      Eventuell bietest Du dem Nutzer auch gleich ein Editieren der WHERE-Klausel an. Why not?

      Das ist keine besonders clevere Idee. Solch eine Möglichkeit stellen Anfänger oftmals unbewusst in ihren Webanwendungen zur Verfügung. Der Fachmann nennt das aber eine SQL-Injection-Sicherheitslücke.

      echo "$verabschiedung $name";

      1. Eventuell bietest Du dem Nutzer auch gleich ein Editieren der WHERE-Klausel an. Why not?

        Das ist keine besonders clevere Idee. Solch eine Möglichkeit stellen Anfänger oftmals unbewusst in ihren Webanwendungen zur Verfügung. Der Fachmann nennt das aber eine SQL-Injection-Sicherheitslücke.

        Nun ja, die vom Nutzer editierte WHERE-Klausel ist natürlich ohnehin zu prüfen (u.a. auf syntaktische Korrektheit), das versteht sich doch von selbst.

        Wir empfehlen für die Kommunikation mit dem Datenserver immer den Einsatz so genannter stored procedures ("gespeicherte Prozeduren"), dann kann es beim Funktionsaufruf keine SQL-Injection geben (ausser man hat ein Eigentor (a la ISQL) programmiert ;).

        1. Vielen Dank für eure Antworten/links ihr habt mir sehr geholfen.
          MFG Hagen

  2. echo $begrüßung;

    ich möchte dem nutzer die möglichkeit geben eine datenbank anhand von suchbegriffen zu durchforsten, und zwar soll einerseits die möglichkeit bestehen das schlüsselwort AND in der suche zu verwenden und andererseits OR.
    Kann mir vielleicht jm. eine Beispiel query geben wie man das relisierene kann? Sucheingabe: Xxx AND Yyy OR Zzz

    Mit einer Beispiel-Query ist dir nicht weiter gedient, denn die ist recht einfach beschrieben. Doch der Weg von der Benutzereingabe "wert AND wert OR wert" zur WHERE-Klausel "feld=wert AND feld=wert OR feld=wert" ist ein nicht gerade einfacher. Du musst die Eingabe parsen, und die Werte und die Binde-Wörter AND und OR erkennen und entsprechend reagieren. Beachte auch, dass du nicht einfach am Leerzeichen auftrennen kannst, weil man ja sicher auch nach "wert bestehend aus mehreren wörtern" suchen können soll. Wenn du das soweit aufgedröselt hast, kannst du nun die WHERE-Klausel zusammensetzen.

    Möglicherweise kannst du aber auch Features deines DBMS nutzen, um zu einem gleichen oder gleichwertigem Ergebnis zu kommen. Als Beispiel sei hier MySQLs Full-Text Search Functions genannt.

    echo "$verabschiedung $name";

    1. Du musst die Eingabe parsen, und die Werte und die Binde-Wörter AND und OR erkennen und entsprechend reagieren. Beachte auch, dass du nicht einfach am Leerzeichen auftrennen kannst, weil man ja sicher auch nach "wert bestehend aus mehreren wörtern" suchen können soll. Wenn du das soweit aufgedröselt hast, kannst du nun die WHERE-Klausel zusammensetzen.

      Noch was zur Maske, die könnte so aussehen:
      http://www.google.de/advanced_search?hl=de ("Ergebnisse finden")

  3. moin,

    falls obendran ein WebFrontend stehen sollte und ein CGI-Prozess dazwischen der evntl. mit PERL betrieben wird, enpfehle ich das Modul

    Text::Query;

    http://rolfrost.de/cgi-bin/linkbase.cgi?altavista=1 was Dir einige Arbeit abnimmt und SQL-Injektionen vermeidet.

    Nachteil: Ein in der Tabelle vorhandener Index wird so nicht genutzt, es werden einfach alle Records durchgegangen was nicht gerade performant ist (bei 20.000 Datensätzen schon zu merken).

    roro