![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 812 Pomógł: 117 Dołączył: 2.12.2008 Ostrzeżenie: (10%) ![]() ![]() |
W jaki sposób implementuje się wyszukiwanie w bazie danych zawierającej polskie znaki, dysponując w zapytaniu ciągiem bez polskich znaków?
Czy można zbudować zapytanie tak, aby każdy porównywany ciąg był uprzednio przetworzony przez dowolną funkcję w php. Czy może są gotowe funkcje w MySql działające w poniższy sposób:
-------------------- |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Czy można zbudować zapytanie tak, aby każdy porównywany ciąg był uprzednio przetworzony przez dowolną funkcję w php. SOUNDEX. -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 812 Pomógł: 117 Dołączył: 2.12.2008 Ostrzeżenie: (10%) ![]() ![]() |
To może inaczej. Wymyśliłem sposób na rozwiązanie problemu, ale nie wiem czy jest wystarczająco dobry (szybki).
Powiedzmy, że w bazie danych mam słowo "słownik", którego użytkownik szuka. wpisuje do wyszukiwarki: "slownik" W skrypcie php odpowiednia funkcja zamienia mi "l" -> "(l|ł)", i dodaje odpowiednie znaki, jak poniżej: ^(s|ś)(l|ł)(o|ó)w(n|ń)ik$ Następnie wykonuje zapytanie REGEXP i wszyscy są zadowoleni, bo użytkownik znalazł to czego szukał ![]() Niestety to rozwiązanie jest dużo wolniejsze od zwykłego zapytania ze znakiem przyrównania. Ale być może jest najlepsze? Proszę o jakieś sugestie na ten temat bardziej doświadczonych programistów, zanim zaimplementuje to rozwiązanie w swoim skrypcie. Edit: Dodam funkcję, którą napisałem na własne potrzeby na wypadek, gdyby pomysł komuś się spodobał:
Oczywiście mile widziane sugestie, gdyby coś dało się zoptymalizować. Ten post edytował flashdev 9.08.2009, 00:33:57 -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 15.06.2025 - 16:35 |