Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: SIMILAR TO
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
lukass
Witam

mam problem przy otrzymywaniu odpowiednich i czystych wynikow za pomoca LIKE, wiec przerzucilem sie na SIMILAR TO majac nadzieje ze to pomoze, niestety jest gorzej niz przedtem :/.

Problem jest taki ze staram sie szukac ciagu znakow ktory ma nastepujace cechy:
- jest na poczatku
- jest na koncu
- jest gdzies pomiedzy poczatkiem a koncem

czyli wyszedlem z zalozenia ze wyrazenie powinno miec wyglad taki: (^|\s)tekst(\s|$).
Gdyz uzywajac LIKE i % czasami ciag znakow byl w jakims innym a tu chodzi o oddzielne slowo/slowa. Niestety wyniki sa rzadne a ciag znakow sie pokrywa z wieloma.

Ktos moze wie gdzie popelniam blad?
Bylbym wdzieczny za pomoc.
SongoQ
Nie wiem czy dobrze mysle ale jesli zle to popraw.

Masz takie rekordy
pole_tekstowe
test asdf asdfasd asdfasd
asdf test sdfasdf asdfadsf asdfasd
asdfa asdf asdf test

i szukasz slowa test

Mozesz uzyc LIKE w ten sposob
  1. ... WHERE pole LIKE 'test %' OR pole LIKE '% test %' OR pole LIKE '% test'


A jesli to nie to to napisz to sie pokombinuje cos z wyrazeniem.
lukass
Cytat(SongoQ @ 2005-07-12 20:09:50)
Nie wiem czy dobrze mysle ale jesli zle to popraw.

Masz takie rekordy
pole_tekstowe
test asdf asdfasd asdfasd
asdf test sdfasdf asdfadsf asdfasd
asdfa asdf asdf test

i szukasz slowa test

Mozesz uzyc LIKE w ten sposob
  1. ... WHERE pole LIKE 'test %' OR pole LIKE '% test %' OR pole LIKE '% test'


A jesli to nie to to napisz to sie pokombinuje cos z wyrazeniem.

Tak cos takiego tylko jesli chodzi o jedno slowo to fajnie ale jesli mam ciag znakow: 'taki sobie ciag' i sa takie pola w tabeli:

byl sobie taki ciag
taki ciag sobie raz byl
ciag sobie taki raz byl
takie ciag sobie byl

i te wszystkie oprocz ostatniego pola pasuja pod zapytanie (kolejnosc slow nie ma znaczenia)

z LIKE bede musial zrobic niesamowita ilosc kombinacji... dlatego wlasnie chcialem uzyc wyrazen, sa one szybsze i mniej pisania ale cos nie wychodzi i tu jest problem.
Jabol
Szukasz x słów, które muszą być obok siebie? to oznacza, że będziesz prawdopodobnie musiał zrobić x! wyrażeń połączonych OR, albo 3*(x!) jeżeli będziesz to robił przez LIKE. Radze Ci poszukać każdego słowa osobno i tym się zadowolić, bo ten poprzedni sposób przy większej ilości słów się rozjedzie kompletnie. Czyli
  1. WHERE xxx ~ 'taki' AND xxx ~ 'sobie' AND xxx ~ 'ciag';
SongoQ
@Jabol Tak sie zastanawiam nad wyrazeniem i problem bedzie jak zrobic zeby wystepowaly w roznej kolejnosci. Masz jakis pomysl jak napisac takie wyrazenie?

Wydaje mi sie ze to co podales to dla tego przypadku bedzie najlepszym rozwiazaniem jak i nie najoptymalniejszym.
lukass
Cytat(Jabol @ 2005-07-12 21:18:55)
Szukasz x słów, które muszą być obok siebie? to oznacza, że będziesz prawdopodobnie musiał zrobić x! wyrażeń połączonych OR, albo 3*(x!) jeżeli będziesz to robił przez LIKE. Radze Ci poszukać każdego słowa osobno i tym się zadowolić, bo ten poprzedni sposób przy większej ilości słów się rozjedzie kompletnie. Czyli
  1. WHERE xxx ~ 'taki' AND xxx ~ 'sobie' AND xxx ~ 'ciag';

Szukam slow ktore musza wystapic w rekordzie czy beda obok siebie to mnie nie interesuje, takze wyrazen bedzie kilka razy mniej niz LIKE'ow, tylko wlasnie w tym problem ze to wyrazenie mi nie dziala a to bylo moje pytanie jak je poprawic smile.gif.

Sprawdze z tylda tak jak podales, czy to cos da smile.gif.

===

Sprawdzilem, tylda dziala jak LIKE z % ale do niej tez mozna wyrazenie dac przy wyszukiwanym slowie/frazie. Niestety to jest problem ktorego nie moge zbagatelizowac robiac prowizorke poniewaz mam baze z kilkoma milionami rekordow i nie jestem jej w stanie przeszukac recznie czy wyrzucac bledne wyniki pozniej...

ROZWIAZANIE PROBLEMU!

Kod
...WHERE komorka ~* '(^| )tekst1( |$).*' AND komorka ~* '(^| )tekst2( |$).*' AND...


W tym zapytaniu wyszuka komorki z dwoma slowami ktore sie znajduja i BEDA TO POJEDYNCZE SLOWA nie zawarte w innych ciagach znakow.

Ufff pomeczylem i dziala, problemem byl znacznik spacji (\s) niechcial tego przyjmowac... dlatego wpisalem zwykla spacje w wyrazeniu i dziala, moze ktos bedzie madrzejszy i znajdzie moj blad.
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.