AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Suche: Suchstrings

Ein Thema von Kuckuckskind · begonnen am 18. Dez 2002 · letzter Beitrag vom 21. Dez 2002
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Kuckuckskind
Kuckuckskind

Registriert seit: 29. Nov 2002
65 Beiträge
 
Delphi 6 Enterprise
 
#1

Suche: Suchstrings

  Alt 18. Dez 2002, 13:05
Hallo,

ich habe folgenden "Schönheitsfehler" bei meiner SELECT-Abfrage.

Die SELECT-Abfrage sieht im Prinzip wie folgt aus:
Code:
SELECT * FROM buecher WHERE titel ="%'+Edit1.Text+'%"
So, wenn ich nun z.B. den Suchbegriff "der" eingebe, bekomem ich sowohl Buchtitel, in denen der als Artikel gebracuht wird als auch ein Wortbestandteil ist. Das ist zwar nicht ideal, damit könnte ich aber leben. Die Abfrage musste ich deshalb so gestalten, weil Buchtitel überwiegend ja auch mehreren Worten bestehen (z.B. "Kochen mit dem Blubb"). Wenn ich ohne Platzhalter (%) die Suche gestalte, wird dieses Buch nicht gefunden, wenn ich nur das zweite Wort eingebe.
ibt es eine Möglichkeit, das zu ändern? Ich hoffe, ihr habt mein Problem verstanden... wirklich schlimm ist es so ja nicht, es ist aber ziemlich störend, wenn man viele Suchergebnisse ausgegeben bekommt, die eigentlich nicht zum ursprünglichen Sinn des Suchbegriffs passen...
  Mit Zitat antworten Zitat
Benutzerbild von harrybo
harrybo

Registriert seit: 26. Nov 2002
Ort: Aachen
87 Beiträge
 
Delphi 6 Enterprise
 
#2
  Alt 18. Dez 2002, 14:43
Hi Kuckuckskind,

ich kann Dein Problem möglicherweise nicht genau verstehen. Könntest Du kurz anhand eines Beispiels beschreiben, was das Ergebnis der SELECT Abfrage sein soll? Also z.B.

Eingabe soll sein: "der"
Suchergebnis soll sein: "Mein Freund der Baum", "Der Prozess"
Nicht im Ergebnis soll sein: "Wanderer, wo willst Du hin?"

(Angabe der Datenbank wäre auch hilfreich, wegen unterschiedlicher Syntax)

gruß, harrybo
Harry Boldt
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#3
  Alt 18. Dez 2002, 15:02
Moin Kuckuckskind,

wie Du schon sagtest, kommst Du um die % nicht herum, aber hast Du schon mal versucht den Suchbegriff um Blanks zu ergänzen (vorne und hinten)?

Dann solltest Du einzeln stehende Worte herausfinden können.

Ob die dann gesetzt werden sollen um ein einzeln stehendes Wort zu finden, oder nicht um den Begriff auch in einem Wortbestandteil zu finden, liesse sich ja über ein Option (z.B. mit CheckBox abfragen) realisieren.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
xbu58

Registriert seit: 10. Dez 2002
Ort: Bäretswil / Schweiz
121 Beiträge
 
Delphi 7 Enterprise
 
#4
  Alt 18. Dez 2002, 18:53
Hallo Kuckuckskind

Bei alle Datenbanken, welche SQL92 unterstützen (das heisst alle neueren DB-Server wie MS-SQLServer ab Version 6.5, alle Sybase Server nicht alter als 4 Jahre, Orakle ab Version 7 usw.) kann mit folgenden WHERE solche Abfragen gemacht werden:
Code:
SELECT * FROM TableName WHERE StringField LIKE '%der%'
Gruss
Xaver
  Mit Zitat antworten Zitat
Benutzerbild von harrybo
harrybo

Registriert seit: 26. Nov 2002
Ort: Aachen
87 Beiträge
 
Delphi 6 Enterprise
 
#5
  Alt 19. Dez 2002, 12:35
Hi,
der Trick mit den Blanks von Christian Seehase sollte funktionieren, falls es das ist, was Du suchst. Da der Suchbegriff der gesamte Titel sein kann, am Anfang, in der Mitte oder am Ende stehen kann, sähe die Abfrage dann so aus:
Code:
SELECT * FROM Tabelle WHERE ((StringField LIKE '%der%') OR (StringField LIKE '%der %') OR (StringField LIKE '% der%'))
gruß, harrybo
Harry Boldt
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#6
  Alt 19. Dez 2002, 12:40
Moin harrybo,

korrigier mich bitte, wenn ich jetzt was falsches sage aber:

%der% beinhaltet doch auch schon %der % und % der%, oder?
(und entspricht somit Kuckuckskinds Ursprungsabfragemaske)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
xbu58

Registriert seit: 10. Dez 2002
Ort: Bäretswil / Schweiz
121 Beiträge
 
Delphi 7 Enterprise
 
#7
  Alt 19. Dez 2002, 14:38
Hallo Chris

Deine Aussage ist richtig, wenn man nach allem sucht, was 'der' enthält. Will man aber das Wort 'der' finden ist ein Blank nötig, da Du ansonsten auch das Wort 'wieder' findest. Das Blank wird jedoch problematisch, wenn das Wort am Anfang oder Ende des Strings steht.
Beispiel:
'Der dumme Hund' kann mit '% der' nicht gefunden werden.

Deshalb sollte man meiner Meinung nach, solche Entscheidungen dem Anwender überlassen.

Gruss
Xaver
  Mit Zitat antworten Zitat
Benutzerbild von harrybo
harrybo

Registriert seit: 26. Nov 2002
Ort: Aachen
87 Beiträge
 
Delphi 6 Enterprise
 
#8
  Alt 19. Dez 2002, 14:41
Hi Christian,
mein Fehler. Du sagst definitiv nichts Falsches. Kommt davon, wenn man auf die Schnelle antwortet. Die erste Bedingung sollte Suchbegriff = Titel sein, darf also gar keine Wildcards enthalten - also:
Code:
SELECT * FROM Tabelle WHERE ((StringField LIKE 'der') OR (StringField LIKE '%der %') OR (StringField LIKE '% der%'))
Das ganze kann man dann natürlich noch parametrisieren (prozedur, bzw. Query). Aber warten wir mal ab, was Kuckuckskind dazu meint...

gruß, harrybo
Harry Boldt
  Mit Zitat antworten Zitat
xbu58

Registriert seit: 10. Dez 2002
Ort: Bäretswil / Schweiz
121 Beiträge
 
Delphi 7 Enterprise
 
#9
  Alt 19. Dez 2002, 15:06
Noch einen Hinweis im Zusammenhang mit LIKE. LIKE besitzt noch einige andere Möglichkeiten für den Ein-/Ausschluss von Rows. Hier ein kurzer Auszug aus der Help vom SQLServer:

Code:
Mit NOT LIKE 'sys%' werden alle Objekte angezeigt, die nicht Systemtabellen sind. Sind insgesamt 32 Objekte vorhanden und LIKE ermittelt 13 dieser Objekte, die dem Muster entsprechen, ermittelt NOT LIKE die 19 Objekte, die dem Muster nicht entsprechen.

Mit einem Muster wie in LIKE '[^s][^y][^s]%' werden möglicherweise nicht immer die gleichen Namen gefunden. Anstelle von 19 Namen werden möglicherweise nur 14 angezeigt, da Namen, die mit s beginnen oder deren zweiter Buchstabe y oder deren dritter Buchstabe s ist, aus dem Resultset ebenso entfernt werden wie die Namen der Systemtabellen. Grund dafür ist die schrittweise Auswertung von Musterzeichenfolgen mit negativen Platzhalterzeichen - es wird Platzhalter für Platzhalter ausgewertet. Wenn der Vergleich an einem beliebigen Punkt der Auswertung fehlschlägt, wird das entsprechende Objekt aus dem Resultset entfernt.
Die gesamte Beschreibung der Funktionalität umfasst ca. 5 Seiten. Ich empfehle deshalb, die Beschreibung für den betreffenden DBServer zu lesen.

Gruss
Xaver
  Mit Zitat antworten Zitat
Benutzerbild von Kuckuckskind
Kuckuckskind

Registriert seit: 29. Nov 2002
65 Beiträge
 
Delphi 6 Enterprise
 
#10
  Alt 19. Dez 2002, 19:54
Zitat von harrybo:
Das ganze kann man dann natürlich noch parametrisieren (prozedur, bzw. Query). Aber warten wir mal ab, was Kuckuckskind dazu meint...


Hi,

das (
Code:
SELECT * FROM Tabelle WHERE ((StringField LIKE 'der') OR (StringField LIKE '%der %') OR (StringField LIKE '% der%'))
) ist gar keien so schlechte Idee! Ich glaube, das werde ich mal ausprobieren!

Fällt euch vielleicht eine Lösung dazu ein, wie ich einen Titel finden kann, der aus mehreren Einzelwörtern besteht, wenn einzelen Worte aus dem Titel eingegeben wurden?
Bsp.:
Buchtitel "Mein Freund der Baum"
eingegebener Suchstring: "Freund Baum"

bisher habe ich meine Suchabfragen immer so formuliert, dass nur auseinander folgende Wörter gefunden werden konnten.

Achja, ich benutze übrigens Paradox und bei meinem ersten Beitrag habe ich mich mal wieder verschrieben und statt "=" natürlich "LIKE" gemeint

Gruß Thea
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz