Autor Beitrag
kabizolis
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 86



BeitragVerfasst: Fr 01.07.05 10:14 
ich bin mir sicher dieses thema wurde schon etliche male diskutiert... konnte es aber nicht finden und villeicht kann mir dabei jemand behilflich sein...

ich habe ein Editfeld in dem ich suchbegriffe eingebe.... nun will ich folgendes in meiner DB suchen:
ausblenden Quelltext
1:
Windows 2003 Server					


gebe es auch so ein in meinem Editfeld....

nun ist in der DB (MySQL) der eintrag unter:
Windows Enterprise 2003 Servereingetragen...

er findet es nicht, weil es nicht in der korrekten reihenfolge eingetippt ist, dies obwohl die abfrage ungefähr so aussieht...

ausblenden Quelltext
1:
SELECT * FROM `cd` WHERE 'title' LIKE '%Edit1.text%'					


also die query funktioniert soweit einwandfrei einfach nicht mit der reihenfolge... :(

wie kann man das handhaben?
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Fr 01.07.05 10:51 
Du könntest jedes Leerzeichen durch ein % ersetzen, dann würde er Dein Beispiel wenigstens finden. Mit der Reihenfolge funktioniert das so aber nicht. Da könntest Du aber einen Algorithmus schreiben, der jede Kombination in der Reihenfolge erzeugt und diese mit OR verknüpft in die Bedingung einbaut.

Ist aber wenig praktikabel, wenn die Suchbegriffe viele Worte beinhalten. Da wäre dann evtl. ein System wie es phpbb nutzt sinnvoll. Dort wird jedes Wort einmal in einer Tabelle gespeichert und in einer Verknüpfungstabelle gespeichert, in welchem Post jedes Wort vorkommt. So kann man mit einer Bedingung für jedes Wort alle Sätze finden, in denen jedes Wort vorkommt.
direction4delphi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 84

WIN 95, WIN 98, WIN ME, WIN NT, WIN 2000, WIN XP, VISTA
D2 Prof, D4 Prof,D2005 Prof, Delphi4Php
BeitragVerfasst: Fr 01.07.05 11:47 
user profile iconUGrohne hat folgendes geschrieben:
Du könntest jedes Leerzeichen durch ein % ersetzen, dann würde er Dein Beispiel wenigstens finden. Mit der Reihenfolge funktioniert das so aber nicht. Da könntest Du aber einen Algorithmus schreiben, der jede Kombination in der Reihenfolge erzeugt und diese mit OR verknüpft in die Bedingung einbaut.


Denke wenn schon dann ein AND Verknüpfung oder?

mfg
MILLI
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Fr 01.07.05 12:29 
user profile icondirection4delphi hat folgendes geschrieben:
Denke wenn schon dann ein AND Verknüpfung oder?

Nein, denn dann findest Du gar nichts. In diesem Fall müsste das dann etwa so aussehen:
WHERE (title LIKE '%Windows%Server%2003%) OR (title LIKE '%Windows%2003%Server%) OR (title LIKE '%Server%Windows%2003%) OR (title LIKE '%Server%2003%Windows%)
Würde man dies nun AND-Verknüpfen müsste alles in den Reihenfolgen vorkommen. Das würde dann vielleicht auf einen Title wie 'Windows Server 2003 Server Windows 2003 Server 2003 Windows' zutreffen, aber nicht auf das Beispiel :mrgreen:
direction4delphi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 84

WIN 95, WIN 98, WIN ME, WIN NT, WIN 2000, WIN XP, VISTA
D2 Prof, D4 Prof,D2005 Prof, Delphi4Php
BeitragVerfasst: Fr 01.07.05 15:08 
user profile iconUGrohne hat folgendes geschrieben:
user profile icondirection4delphi hat folgendes geschrieben:
Denke wenn schon dann ein AND Verknüpfung oder?

Nein, denn dann findest Du gar nichts. In diesem Fall müsste das dann etwa so aussehen:
WHERE (title LIKE '%Windows%Server%2003%) OR (title LIKE '%Windows%2003%Server%) OR (title LIKE '%Server%Windows%2003%) OR (title LIKE '%Server%2003%Windows%)
Würde man dies nun AND-Verknüpfen müsste alles in den Reihenfolgen vorkommen. Das würde dann vielleicht auf einen Title wie 'Windows Server 2003 Server Windows 2003 Server 2003 Windows' zutreffen, aber nicht auf das Beispiel :mrgreen:


So würd ich das uach beim besten Willen nicht machen. Einzelne Wörter anhand des Leerzeichens trennen und so die And Query derstellen

ausblenden Quelltext
1:
WHERE (title LIKE '%Windows%') AND (title LIKE '%2003%') AND (title LIKE '%Server%')					


In deinem Fall würde keine OR Verknüpfung Sinn machen du musst ja nicht 3 mal das gleich an den SQL Server fragen

mfg
MILLI
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Fr 01.07.05 16:16 
Jo, stimmt, das wäre auch eine gute Idee. BIn ich erstmal gar nicht drauf gekommen, weil ich den Fall bisher noch nicht behandeln musste ;-)