mysql select LIKE problem

bertengel
Posts: 33
Joined: 2006-03-21 22:40

mysql select LIKE problem

Post by bertengel »

Hallo Forum,

ich brauche mal eine kleine Hilfestellung beim Durchsuchen einer DB mit Like.

und zwar möchte ich nur wortfrasen die am anfang eines wortes stehen finden ... das get ja mit like '% frase%' also ein leerzeichen muss vorhanden sein.
ist das wort an erster stelle dann ist kein leerzeichen vor dem wort .. also eine weiteres OR LIKE 'frase%'.


text = "horst ist horstel und behorstel";

frase = horst;

gefunden werden soll horst b.z.w. horstel aber nicht behorstel

SELECT * FROM table WHERE text LIKE 'frase%' OR text LIKE '% frase%';

Kann man das OR nicht zusammenfassen? vielleicht mit regex oder assci-

Gruß Mike
Top

bertengel
Posts: 33
Joined: 2006-03-21 22:40

Re: mysql select LIKE problem

Post by bertengel »

allgemeine regexp :

b bedeutet dass das Suchmuster an einer "Wortgrenze" stehen muss, und ist damit den Ankern vergleichbar. Wenn das aktuelle Zeichen ein "Wort"-Zeichen (w)ist, darf das davor stehende Zeichen kein "Wort"-Zeichen sein. b wird normalerweise verwendet, um bei der Suche nach einem Wort zufällige Treffer innerhalb eines längeren Wortes zu vermeiden. bcatb z.B. liefert keinen Treffer für catfish, es findet aber cat unabhängig davon, ob es von Satzzeichen, Leer- oder z.B. Anführungszeichen umgeben ist. bcat findet cat nur an einem Wortanfang, catb nur an einem Wortende. Umgekehrt verlangt B (Großbuchstabe), dass das aktuelle Zeichen nicht an einer Wortgrenze steht.

wie bekomme ich diesesn regexp ins mysql select ---- text REGEXP [bfrase] ??
Top

bertengel
Posts: 33
Joined: 2006-03-21 22:40

Re: mysql select LIKE problem

Post by bertengel »

ich glaube ich habs:

text REGEXP '^frase| frase'

gehts noch einfacher?
Top

User avatar
isotopp
RSAC
Posts: 482
Joined: 2003-08-21 10:21
Location: Berlin

Re: mysql select LIKE problem

Post by isotopp »

bertengel wrote:und zwar möchte ich nur wortfrasen die am anfang eines wortes stehen finden ... das get ja mit like '% frase%' also ein leerzeichen muss vorhanden sein. ist das wort an erster stelle dann ist kein leerzeichen vor dem wort .. also eine weiteres OR LIKE 'frase%'.


Phrase

Code: Select all

mysql> create table t ( i integer unsigned not null primary key auto_increment, t mediumtext ) engine = myisam;
mysql> alter table t add fulltext (t);
mysql> insert into t (t) values (".....");

mysql> select i from t where match (t) against ("phrase*" in boolean mode);


Warum so?

1. Wenn Du ein WHERE t LIKE "bla%" benutzt, dann kann das in der Art "WHERE t >= 'bla' AND t < 'blb'" umgeschrieben werden und ein Index auf t kann für den "bla"-Stamm der Phrase verwendet werden. Allgemeiner kann ein Index auf ein LIKE bis zum ersten Wildcard verwendet werden.

Anders gesagt ist ein "WHERE t LIKE '%bla%'" immer in indexloser Full Table Scan. Doof.

2. Wenn Du dagegen ein MATCH AGAINST ( ... IN BOOLEAN MODE) verwendet, kann der FULLTEXT Index verwendet werden. Normal sucht MATCH AGAINST nach Ganzworten, aber mit BOOLEAN MODE kannst Du Wildcards verwenden.

Lies mehr über MySQL Volltextsuche in im Handbuch.
Lerne MySQL und laß Dir Dein Wissen bescheinigen mit einer Zertifizierung.
Top