![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 31.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
Mam juz tego dosyc... zaczelo sie od napisania wyszukiwarki. Po wpisaniu słowa "łódź" miała mi znaleźć takze te dane z bazy ktore zawierały "Łódź" a także "ŁÓDŹ". Wyszukiwanie bralo pod uwage jeszcze wiele innych kryteriow wiec nie dalo rady wszystkiego zamknac w jednym sqlu.
Wiec biore SELECT * FROM OBIEKTY.. i dalej jesli cos pasuje to wrzucam do tablicy wynikow. Porownanie musi byc case insensitive czyli to nie podziala:
nie dziala tez
Ale
Co tu zrobić??(IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 324 Pomógł: 5 Dołączył: 14.12.2004 Ostrzeżenie: (0%) ![]() ![]() |
Wyszukiwarkę najlepiej robić przy pomocy zapytań sql. Mozna zrobic nawet bardzo skomplikowane zapytanie które znajdą Ci wszystko. Tylko trzeba troche z tym powalczyć...(IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 31.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
To jak zrobic zeby po wpisaniu Gdansk wyszukiwarka znalazła Gdańsk?
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
zrobic o jednego wiecej WHERE, gdzie ten dodatkowy bedzie przyjmowal wartosc = '$nazwaMiastaPoPrzepuszczeniuPrzezFunkcje'
a funkcja o ktorej mowa, bedzie usuwac polskie znaki (tzn zastepywac je) |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 31.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
Ale nie da sie napisac takiej funkcji efektywnie.... Ta funkcja musialaby zmienic Gdansk na Gdańsk
Ale przeciez Gdansk => Gdańsk Gdąnsk Gdąńsk .... JAk napisac taka funkcje?! |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Wiec może w bazie trzymaj nie 'Gdańsk' tylko 'Gdansk'.
Albo trzymaj tak i tak :] Problem zniknie |
|
|
![]()
Post
#7
|
|
Grupa: Przyjaciele php.pl Postów: 2 196 Pomógł: 2 Dołączył: 17.01.2004 Skąd: Sosnowiec Ostrzeżenie: (0%) ![]() ![]() |
Napisz sobie funkcję w php, która zamieni Ci polskie znaki na _ i taki ciąg daj w zapytaniu SQL.
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 31.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
Nie chcialbym dublowac danych w bazie... jest sporo rekordow... Z kolei nie widze mozliwosci napisania takiej funkcji.
Jak to zmienia polskie znaki na '_'? czyli
To nie zadziala jak trzeba.. Czy ktos moglbym rozwiazac ten problem? Chyba to nie taki rzadki przypadek, ze chce skorzystac z wyszukiwarki z polskimi znakami ktora bedzie dzialac jesli ktos nie ma polskich znakow... |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 82 Pomógł: 0 Dołączył: 22.07.2004 Ostrzeżenie: (0%) ![]() ![]() |
Ogolnie zeby taka zamiana miała sens(dodatkowa kolumna z nazwa bez polskich fontów) trza polskie fontu zastapic unikatami, czyli np
Gdańsk by bylo Gda(n z kreska)sk (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) I wtedy mozemy wuszikiwać bez problemów (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 31.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
Ok, dodalem nowa kolumne ale to nie rozwiazuje problemu. Wyszukiwarka ma szukac w nazwie, opisie oraz miescie.
Czyli musialbym zdublowac kolejne kolumny, w tym kolumne z opisem, czyli duzo miejsca by to zajmowalo... A czy nie mozna by zwrocic wszystkich rekordow i potem wybrac te ktore sa ok? Wielki minus to to ze trzeba zawsze wybrac wszystkie rekordy... Co o tym myslicie? |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 189 Pomógł: 0 Dołączył: 4.03.2005 Skąd: Jaworzno Ostrzeżenie: (0%) ![]() ![]() |
pewien nie jestem, ale chyba o to chodzi? |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 7.01.2004 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Jak się nie boisz (czytaj jak nie masz setek userów) to możesz:
i potem
RLIKE mozna też zastąpić REGEXP To dotyczy MySQL - nie wiem jak w innych bazach Ten post edytował DaNTe 15.07.2005, 13:26:49 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 31.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Jak się nie boisz (czytaj jak nie masz setek userów) to możesz: ... function filtrujPl($tekst) { return strtr($tekst, array( 'ł'=>'[ŁłLl]', 'ą'=>'[ĄąAa]', 'ń'=>'[ŃńNn]', /*... itd ...*/ 'Ł'=>'[ŁłLl]', /*... itd ...*/ )) } i potem SQL "SELECT * FROM tab WHERE fld1 RLIKE '".filtrujPl('Gdańsk')."'" Brzmi super... Wklepałem ale dostaje:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in .... to samo w przypadku
Dysponuje MySQLem... Ten post edytował codo 15.07.2005, 17:39:07 |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 7.01.2004 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
a nie zapomniałeś o uszach ? zwróć uwagę, że powinno być
i nie wiem czemu masz AaAa a nie AaĄą BTW: zawsze sobie sprawdzaj (w czasie debugu)
to ci dokladniej powie gdzie problem. Ten post edytował DaNTe 19.07.2005, 13:57:38 |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 31.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
Ok, dziekuje uruchomilo sie REGEXP mam tylko jeszcze jedno pytanie:
Mam obiekt o nazwie "XYZ Otmuchów Duży". User wpisuje otmuchow wiec dostaje
ale dostaje brak wyników za to na zapytanie:
mam wynik... Jak zrobic zeby bylo dobrze? Ten post edytował codo 20.07.2005, 14:27:26 |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 2.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
Sam post jest już nieco przeterminowany ale dla osób szukając rozwiązania moge zaproponowac coś takiego:
Zakładając, że zmienna $temp to jest jakaś nazwa: CODE $temp = str_replace(array('Ą','Ż','Ź','Ć','Ś','Ę','Ń','Ł','Ó'),array('ą','ż','ź','ć','ś','ę','ń','ł','ó'),strtolower($temp)); Później juz standardowo do zapytania sql składamy: CODE $where = 'where lower(name) LIKE \''.$temp.'\''; Ten sposób przynajmniej u mnie daje pozytywne wyniki. Ten post edytował vhris 2.02.2009, 15:15:11 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 06:08 |