Marcus: (ASP+SQL) Suchformular

Hallo Leute !

ich hab ein Suchformular erstellt das meine Kollegen hier im Intranet benutzen sollen.

Suchformular:
----------------------------------
Name:
Vorname:
Adresse:
PLZ:
Ort:
----------------------------------

Man soll sowohl kombinierte Abfrage erstellen können als auch nur Wortteile eingeben.

Wie muss die SQL-Abfrage aussehen ???

Bei meiner zeigt er immer alle Datensätze der DB an.

Gibt es Probleme mit Text und Zahl-Feldern ???

Über einige Tips wäre ich dankbar

mfg & schönes Wochenende

Marcus

  1. Hallo Leute !

    ich hab ein Suchformular erstellt das meine Kollegen hier im Intranet benutzen sollen.

    Suchformular:

    Name:
    Vorname:
    Adresse:
    PLZ:
    Ort:

    Man soll sowohl kombinierte Abfrage erstellen können als auch nur Wortteile eingeben.

    Wie muss die SQL-Abfrage aussehen ???

    ich bin kein asp-mensch, aber du sollst das sql-übersetzen können:
    $sql = "select name,vorname,adresse,plz,ort from adressen where name like '%$formular{name}%' and vorname like '%$formular{vorname}%' and ....

    das like liefert dir alle sätze, welche den eingegebenen string enthalten (% steht für keins oder beliebig viele zeichen).

    das and dazwischen heißt, das alle bedingungen zutreffen müssen. du kannst es durch or ersetzen, um alle anzuzeigen auf die eine der bedingungen zutrifft. du kannst aber auch ein select im formular machen mit and und or und das in das sql einbauen. das gebastelte sql führst du dann aus und zeigst die ergebnisse.

    gerhard

    1. Wie muss die SQL-Abfrage aussehen ???
      ich bin kein asp-mensch, aber du sollst das sql-übersetzen können:
      $sql = "select name,vorname,adresse,plz,ort from adressen where name like '%$formular{name}%' and vorname like '%$formular{vorname}%' and ....
      das like liefert dir alle sätze, welche den eingegebenen string enthalten (% steht für keins oder beliebig viele zeichen).

      Vieles davon ist sehr wahr.

      Aber das Hauptproblem besteht darin, daß erst mal definiert werden muß, welche Ergebnisse eine Suche überhaupt liefern soll.

      In dem obigen Beispiel könnte der Benutzer beispielsweise nicht nach *exakten* Werten suchen, weil er immer auch solche Treffer gezeigt bekommen würde, welche die Suchzeichenkette enthalten.
      Würdest Du ihm aber beispielsweise erlauben, die "%"-Zeichen selbst einzugeben, dann hätte er einen zusätzlichen Freiheitsgrad - auf Kosten einer komplizierteren Eingabesyntax.
      Diese wiederum kann man dadurch umgehen, daß man statt der "%"-Eingabe einen Schalter im Such-Skript setzen läßt, der die Auswertungsstrategie beeinflußt. In Deinem Fall: Wenn der Schalter gesetzt ist, suchst Du mit "LIKE" und ergänzt selbständig die "%"-Zeichen usw. - wenn nicht, dann vergleichen mit "=" (das ist wesentlich performanter als "LIKE") und ohne "%"-Zeichen.
      Man kann eine Wissenschaft daraus machen ...

      Um eine sinnvolle Suchmaschine zu bauen, muß man vor allem selbst mit Suchmaschinen umgehen können und ihre Stärken und Schwächen lernen.
      Und man muß die zu durchsuchenden Daten verstehen und begreifen, welche Suchoperationen sinnvoll (und welche nur Schmackofatz) sind. Man kann den Anwender genauso unter- wie überfordern.

      Laß Dich doch mal von unserer Archivsuchmaschine http://www.teamone.de/cgi-local/sfasuch.pl inspirieren ... und vor allem: Rede mit Deinen Anwendern, sonst produzierst Du am Markt vorbei!

  2. Hi Marcus

    Ich würds so machen:
    strSQL = "SELECT DISCTINT * FROM Datenbank WHERE "
    If len(name) > 0 then strSQL = strSQL + " Name like '%"& name & "%'"

    if len(name) > 0 and len(vorname>0) then strSQL = strSQL + " OR";
    if len(name) > 0 and len(adresse>0) then strSQL = strSQL + " OR";
    if len(name) > 0 and len(plz>0) then strSQL = strSQL + " OR";
    if len(name) > 0 and len(ort>0) then strSQL = strSQL + " OR";

    If len(vorname) > 0 then strSQL = strSQL + " Vorname like '%"& vorname & "%'"

    if len(vorname) > 0 and len(adresse>0) then strSQL = strSQL + " OR";
    if len(vorname) > 0 and len(plz>0) then strSQL = strSQL + " OR";
    if len(vorname) > 0 and len(ort>0) then strSQL = strSQL + " OR";

    If len(adresse) > 0 then strSQL = strSQL + " Adresse like '%"& adresse & "%'"

    if len(adresse) > 0 and len(plz>0) then strSQL = strSQL + " OR";
    if len(adresse) > 0 and len(ort>0) then strSQL = strSQL + " OR";

    If len(plz) > 0 then strSQL = strSQL + " PLZ like '%"& plz & "%'"

    if len(plz) > 0 and len(ort>0) then strSQL = strSQL + " OR";

    If len(ort) > 0 then strSQL = strSQL + " Ort like '%"& ort & "%'"

    Hechel. Also das Beispiel dürfte Funktionieren. Eine leichtere Methode ist mir bisher nicht eingefallen.

    Cu
    Uwe

    1. Hechel. Also das Beispiel dürfte Funktionieren. Eine leichtere Methode ist mir bisher nicht eingefallen.

      Wenn Du die if-Anfragen ineinander schachtelst, statt sie immer wieder neu hinzuschreiben, wird es mindestens um die Hälfte kürzer-