![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 72 Pomógł: 0 Dołączył: 20.03.2002 Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
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
A jesli to nie to to napisz to sie pokombinuje cos z wyrazeniem. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 72 Pomógł: 0 Dołączył: 20.03.2002 Ostrzeżenie: (0%) ![]() ![]() |
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
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. |
|
|
![]()
Post
#4
|
|
Grupa: Przyjaciele php.pl Postów: 1 467 Pomógł: 13 Dołączył: 22.02.2003 Ostrzeżenie: (0%) ![]() ![]() |
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
|
|
|
![]()
Post
#5
|
|
Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
@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. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 72 Pomógł: 0 Dołączył: 20.03.2002 Ostrzeżenie: (0%) ![]() ![]() |
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
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Sprawdze z tylda tak jak podales, czy to cos da (IMG:http://forum.php.pl/style_emoticons/default/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. Ten post edytował lukass 12.07.2005, 23:03:59 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 21:58 |