Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [sql] Wyszukiwanie całych wyrazow, zapytanie SQL + regexp
Forum PHP.pl > Forum > Przedszkole
r.drozd
Chciałbym moc wyświetlić wpisy z bazy, w ktorych w polu tresc znajduje sie cały wyraz (nie ciąg znakow).
W funkcji preg_match jest możliwość zastosowania w tym celu kotwicy \b .

Probowałem ja rowniez zastosowac w skladni SQL`a:
  1. <?php
  2. $query = mysql_query("SELECT id, tytul, tresc FROM slownik WHERE tresc regexp \"bwyrazb\"") or die(mysql_error());
  3. ?>


ale takie rozwiązanie nie działa (nie sa zwracane żadne wyniki, bez kotwic \b wyniki sa zwracane).

Może jakieś podpowiedzi jak rozwiązać ten problem, lub linki z opisem rozwiązania, bo sam praktycznie nic w Google ani w wewn. wyszukiwarce forum.php.pl nie znalazłem.
Zależy mi aby wykonać to zadanie w zapytaniu SQL.

Dziekuję z gory za ew. podpowiedzi.
Pozdr. R. Drozd
tsharek
nie wiem czy o to chodzi, ale nie możesz poprostu użyć polecenia LIKE (lub ILIKE) w połączeni z "%...%" i spacjami?
np:
  1. SELECT id, tytul, tresc FROM slownik WHERE tresc LIKE "% wyraz %"
Chociaż tutaj może być problem jeżeli dany wyraz znajduje się na końcu lub początku... albo nie...

  1. SELECT id, tytul, tresc FROM slownik WHERE tresc LIKE "% wyraz %" OR tresc LIKE "wyraz %" OR tresc LIKE "% wyraz"


Może rozwiązanie mało elegancke, ale powinno działać:) regexy uważam za bardzo wolne przy dużych bazach
r.drozd
Hmm troszkę topornie, ale to jakieś rozwiązanie. Pozostawał by jeszcze problem z interpunkcją stojącą przy wyrazach np. kropki przecinki...

Dalej jednak będę obstawał przy regex, ma ktoś jakieś pomysły??
Hazel
Po co? Like faktycznie działa szybciej, lepiej i w ogóle...
A interpunkcja da się zrobić też...
W regexpach nie ma na to mniej topornego sposobu.
r.drozd
Cytat(Hazel @ 17.08.2007, 17:10:04 ) *
A interpunkcja da się zrobić też...


Masz jakiś pomysł, gotowe rozwiązanie, albo jakąś podpowiedź jak poradzić sobie z interpunkcją przy zastosowaniu "LIKE"??
Hazel
Dodajesz do poprzedniego kodu:

  1. tresc LIKE "%, wyraz%" OR tresc LIKE "%,wyraz%" OR tresc LIKE "%wyraz,%" OR tresc LIKE "%wyraz ,%"


Chociaż toporność tego sposobu nie zna granic - musisz wszystkie możliwości uwzględniać... ALe z wyrażeniami regularnymi tak samo przecież...
r.drozd
Cytat(Hazel @ 17.08.2007, 17:35:47 ) *
Chociaż toporność tego sposobu nie zna granic - musisz wszystkie możliwości uwzględniać...

Jeśli dodać kilka pol do przeszukania to będzie to dopiero topor:).

Cytat(Hazel @ 17.08.2007, 17:35:47 ) *
ALe z wyrażeniami regularnymi tak samo przecież...

No gdyby można było używać kotwicy /b (a z tego co sprawdzałem to nie działa) to kod byłby o wiele mniej toporny.
Chyba pozostanę przy funkcji preg_match wykonywanej na całościowych wynikach.
kris2
Proponuje poczytac Full-Text Search Functions na stronie MySQL'a
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.