hallöle
wie kann ich in einem beliebigen text nach GANZEN wörtern suchen?
$abfrage = "SELECT * FROM search WHERE inhalt LIKE '%$suchwort%'";
gibt auch alle ergebnisse aus, wo $suchwort ein teil eines wortes ist.
gruss
peter
Sonnenschein
08-04-2002, 16:10
Da sollte doch ein blank nach $Suchwort reichen, oder?
Genau, es fehlen die Blanks:
"SELECT * FROM tbl WHERE (BINARY field LIKE '% $suchwort %')"
Das BINARY bewirkt zusätzlich, dass Groß/Kleinschreibung berücksichtigt wird.
Ach ja...
Damit das dann funktioniert darf das Wort nicht am Anfang anfangen sondern davor müsste dann immer ein Leerzeichen stehen.
Desweiteren findet man damit nur Wörter, die von einem Leerzeichen gefolgt werden d.h. sobald ein Satzzeichen auftritt wird das Wort nicht mehr gefunden...
Damit das dann funktioniert darf das Wort nicht am Anfang anfangen sondern davor müsste dann immer ein Leerzeichen stehen.
Desweiteren findet man damit nur Wörter, die von einem Leerzeichen gefolgt werden d.h. sobald ein Satzzeichen auftritt wird das Wort nicht mehr gefunden...
und genau das ist das problem.
peter
Dann bleibt dir vermutlich nichts anderes übrig, als die Daten auszulesen und dann mit RegExp zu prüfen.
Falls jemand allerdings eine andere Lösung haben sollte würde auch mich das freuen...
Reguläre Ausdrücke kann man auch direkt bei der Abfrage verwenden:
http://www.mysql.com/doc/R/e/Regexp.html
bzw.:
http://www.mysql.com/doc/S/t/String_comparison_functions.html
( RLIKE bzw. REGEXP )
<input class="feld" type="text" name="suche">
<input class="button" type="submit" value="suchen" name="submit">
$result = mysql_query (" SELECT * FROM Tabellenname WHERE DEINE_SPALTE_MIT_TEXT LIKE '%".addslashes($suche)."%'")
Troublegum
11-04-2002, 17:57
Lesen Archie Lesen :o
Das war nicht gefragt und übrigens auch schon längst bekannt. ;)
Original geschrieben von Juggler
Ach ja...
Damit das dann funktioniert darf das Wort nicht am Anfang anfangen sondern davor müsste dann immer ein Leerzeichen stehen.
Desweiteren findet man damit nur Wörter, die von einem Leerzeichen gefolgt werden d.h. sobald ein Satzzeichen auftritt wird das Wort nicht mehr gefunden...
einfach vorm Vergleichen Leerzeichen vor und hinter den Feldinhalt einfügen:
"SELECT * FROM tbl WHERE (BINARY CONCAT(' ', field, ' ') LIKE '% $suchwort %')"
Natürlich ist das möglich...
Aber zumindest mir geht es so, dass ich nicht ausschliesslich Buchstaben und Leerzeichen verwende, sondern auch ab und an mal Satzzeichen setze. Desweiteren enthält die zu durchsuchende Spalte auch HTML In diesem Fall wären also RegExp genau das Richtige.
Ich hab nur noch nicht geblickt, wie das genau funktioniert
$pattern = ".*[\\\\s]+$search[^a-zA-Z]{1}.*";
$query = "SELECT * FROM tbl WHERE (BINARY field REGEXP '$pattern')";
Geht das so in etwa?
Ich weis... ausprobieren...