Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] Like
Forum PHP.pl > Forum > Przedszkole
Ziels
Witam,

Chciałbym zadac bazie zapytanie typu
  1. SELECT * FROM baza WHERE tresc LIKE '(spacja lub nic)$wyrażenie(spacja lub nic)'


Co rozumiem przez spacja lub nic? Chcę szukać konkretnego wyrazu, jeśli jest w polu zapisany jako pierwszy to również powinno go znaleźć. Takie kombinowanie po to, żeby wyszukiwarka nie szukała mi po bbtagach... Wie ktoś jak to zrobić?
Sedziwoj
Kurde jednak muszę SQL'a się poduczyć.
A tu można albo użyć _ jako pojedynczego symbolu (niezbyt pasuje, bo dowolny symbol), lub REGEXP (tak się to chyba nazywało) zamiast LIKE
siemakuba
Sprawdź tak:
  1. SELECT * FROM tabela WHERE tresc RLIKE " ?TWOJE_WYRAZENIE ?";

Przed każdym ze znaków zapytania stoi spacja.

pozdr.
Ziels
@up

To dopuszcza spacje, ale nie blokuje wszystkiego innego czyli chyba odpada
Sedziwoj
Cytacik z manuala "RLIKE is a synonym for REGEXP"
Ziels
Cytat(Sedziwoj @ 28.11.2006, 15:51:07 ) *
Cytacik z manuala "RLIKE is a synonym for REGEXP"


Huh... No to muszę znaleźć jakiś tutek do Wyrażeń Regularnych mysqla tongue.gif

edit:

Wie może ktoś dlaczego to:
  1. SELECT * FROM tabela WHERE content RLIKE '[^a-zA-Z0-9](slowo)[^a-zA-Z0-9]'

Nie działa jeśli przed słowem nic się nie znajduje?
Sedziwoj
  1. SELECT * FROM baza WHERE tresc REGEXP "[[:<:]]$wyrażenie[[snitch.gif:]]"

Ale nie jestem pewien.
Ziels
Już mam -
  1. SELECT * FROM tabela WHERE content RLIKE '([^[:alnum:]]|^)wyrazenie([^[:alnum:]]|$)'


(ha! zaraz się dowiem że [:<:] to to samo co [:alnum:] tongue.gif)
Sedziwoj
  1. SELECT * FROM tabela WHERE content REGEXP '[^a-zA-Z0-9]?(slowo)[^a-zA-Z0-9]?'

Tak powinno działać.

Cytat
[[:<:]]
[[:>:]]
These match the null string at the beginning and end of a word respectively. A word is defined as a sequence of word characters which is neither preceded nor followed by word characters. A word character is an alnum character (as defined by ctype(3)) or an underscore (_).
mysql> SELECT "a word a" REGEXP "[[:<:]]word[[:>:]]"; -> 1
mysql> SELECT "a xword a" REGEXP "[[:<:]]word[[:>:]]"; -> 0


To wszystko z manuala do MySQL... tylko czasem nie kapuję co po angielsku piszą, w sumie to czasem po polsku mam kłopot.
Ziels
Hmmm

Pozostaje jeszcze kłopot z takimzapisem w bazie: [ code] cośtam [ /code]

Jeśli wpisze code to wyszuka mi po tych znacznikach (w końcu "[" nie należy do klasy [a-zA-Z0-9]) jeslidopisze \[ to wywala błąd o niezakończonym nawiasie...
Sedziwoj
I znów kłania się manual biggrin.gif
Cytat
Note: Because MySQL uses the C escape syntax in strings (for example, `\n'), you must double any `\' that you use in your LIKE strings. For example, to search for `\n', specify it as `\\n'. To search for `\', specify it as `\\\\' (the backslashes are stripped once by the parser and another time when the pattern match is done, leaving a single backslash to be matched).
Ziels
  1. SELECT * FROM rzc_articles WHERE content
  2. RLIKE '([^[:alnum:]\\[/]|^)(the)([^[:alnum:]\\[]|$)'


Jest pełno sposobów na ominięcie tego ale jak ktoś nie będzie zaglądałw kod to sie nie domyśli tongue.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.