Thema: Delphi sql für ganz harte

Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: sql für ganz harte

  Alt 11. Mai 2006, 10:30
Das ist mir schon klar, aber vielleicht änderst du einfach deinen Suchstring, bzw. bastelst Dir eine kleine Funktion, die das macht. Meine Lösung dürfte jedenfalls funktionieren, wenn man die Frage (also den Suchstring) anders formuliert, nämlich: Ich suche alle F1, die mindestens "die in dieser Liste enthaltenen Wörter" enthalten:

Delphi-Quellcode:
Function CreateSQL (aWords : TStringList) : String;
Var
  sJoin,sWhere : String;

Begin
  sJoin := 'Words w1';
  sWhere := Format('w%d.wert = %s',[1,QuotedStr(aWords[0]]);
  For i:=1 to aWords.count - 1 do begin
    sJoin := sjoin + Format (' join words w%d on w%d = w%0:d.f1',[i,i-1]);
    sWhere := sWhere + Format('and w%d.wert = %s',[i+1,QuotedStr(aWords[i]]);
  End;
  Result := Format ('Select distinct w1.f1 from %s where %s',[sJoin, sWhere]);
End;
Diese Routine dürfte ungefähr die Abfrage so formulieren, wie ich es vorgeschlagen habe. Deine Aufgabe ist es nun, deinen Suchtext ('Wort1 Wort2 %') in eine Stringliste zu verwandeln. Wenn das '%' bedeutet soll, das die gesuchten F1 MINDESTENS diese Wörter enthalten muss, dann kannst musst Du noch den Fall behandeln, wenn man das '%' weglässt. Dann muss die Wortmenge je F1-Wert GENAU mit der Wortliste übereinstimmen.

Wenn die Reihenfolge der Wörter auch noch eine Rolle spielt, dann musst Du die Where-Klausel je Wort noch erweitern.

[edit] Nach mehrmaligem Durchlesen Deiner Anwort verstehe ich deine Kritik... Dir ist es lieber, die Wortliste je F1 in diesen String zu konkatenieren und DANN zu suchen, dann kann man den LIKE-Operator natürlich besser verwenden... DAS scheint nur mit einer stored Procedure zu gehen. Für den Fall, das du nur Übereinstimmungen einzelner Wörter suchst, ist meine Methode jedoch ausreichend.

Ach ja: Eine gute DB sollte niemals lange für eine Suche benötigen (Aggregate sind eine andere Sache)
[/edit]
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat