Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwarka
Forum PHP.pl > Forum > Bazy danych > MySQL
sepix
Mam taki problem, otóż jak zgrabnie z poziomu MySql wyszukiwać frazy z pól tekstowych w postaci "fraza" tzn. wyniki gdzie szukane słowo występuje samodzielnie a nie jako część innego słowa, czyli odpada LIKE %fraza%. Odpada użycie przeszukiwania pełnetekstowego. Może RLIKE (REGEXP)?
itsme
jezeli dobrze zrozumialem ze szukasz np dom w zdaniu Ten dom jest ladny - ale chcesz wykluczyc wyszukane dane typu Ten domek jest ladny.

Kod
select * from tabela where pole like '% $szukane_slowo %'

czyli szukane slowo musi byc ponadto "otoczone" spacjami
sepix
Ty to masz łeb :-) Nie wpadłem na to. No dobrze ale pozostają jeszcze "warunki brzegowe" :-) czyli sytuacja jak wyraz znajdzie się na samym początku albo końcu i co teraz? Pozdrawiam i dzięki.[/code]
kurtz
Cytat
jezeli dobrze zrozumialem ze szukasz np dom w zdaniu Ten dom jest ladny - ale chcesz wykluczyc wyszukane dane typu Ten domek jest ladny.

Kod
select * from tabela where pole like '% $szukane_slowo %'

czyli szukane slowo musi byc ponadto "otoczone" spacjami
tylko wtedy odpada: dom, "dom" -dom dom. (czyli dowolne znaki diaktryczne)

trzeba wiec zaprzac wyrazenia regularne i sprawdzac granice slowa (a ze w mysqlu jest zaimplementowany POSIX musisz sie troszke pomeczyc)
itsme
jezeli chodzi o warunki brzegowe dodajesz tylko
Kod
or pole like '$szukane_slowo %' or pole like '% szukane_slowo'

co do znakow typu -dom /dom ,dom ;dom ...... nie wiem smile.gif) ale to juz jest cos
[/quote]
kurtz
Cytat
jezeli chodzi o warunki brzegowe dodajesz tylko
Kod
or pole like '$szukane_slowo %' or pole like '% szukane_slowo'

co do znakow typu -dom /dom ,dom ;dom ...... nie wiem :)) ale to juz jest cos
i zabijesz mysqla 50 like'ami.

eh - po to stworzono wyrazanie regularne zeby z nich korzystac.

hmm glowy nie dam ale czy fulltext tego nie uwglednia?..
sepix
No tak z tymi znakami to już gorzej by było. Ja próbowałem z RLIKE - tam można stosować wyrażenia regularne np.
Kod
pole RLIKE '^dom  .'
Co by było odpowiednikiem warunku brzegowego z początku pola.
Sprawę na pewno rozwiązałoby FULLTEXTSEARCH ale to chyba dopiero jest w Mysql 4.0 - trzeba pozakładać indexy pełnotekstowe na pola i szukać metodą
Kod
MATCH (pole1,pole2) AGAINST ('fraza')

Pozdrawiam
p.s. znak dolara którego użyłeś to jest symbol zmiennej w phpie, a nie element wyrażenia regularnego?
itsme
Cytat
p.s. znak dolara którego użyłeś to jest symbol zmiennej w phpie, a nie element wyrażenia regularnego?

dokladnie
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.