Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> ignorowanie polskich znaków w zapytaniu
natasha
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 10.11.2008

Ostrzeżenie: (0%)
-----


hej

mam w tabeli 'test' rekordy np.

id | nazwa
1 żółwik


jak napisać select'a żeby wyjać powyższy rekord lecz w warunku żeby było WHERE NAZWA = 'zolwik'

czyli używając wyrazów bez polskich znaków znaleźć w bazie wyrazy z polskimi znakami.

Jest jakaś funkcja w mysql żeby zignorować polskie znaki podczas przeszukiwania bazy questionmark.gif
Go to the top of the page
+Quote Post
skowron-line
post
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Cytat(natasha @ 12.01.2010, 13:55:38 ) *
Jest jakaś funkcja w mysql żeby zignorować polskie znaki podczas przeszukiwania bazy questionmark.gif

Tak, nie, prawie nazywa się replace.


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
natasha
post
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 10.11.2008

Ostrzeżenie: (0%)
-----


Cytat(skowron-line @ 12.01.2010, 14:24:35 ) *
Tak, nie, prawie nazywa się replace.


replace moze i byłby dobry w odwrotnej sytuacji czyli przy szukaniu słowa z polskimi znakami w bazie gdzie nie ma polskich wyrazów

chodzi mi o to ze nie wiem jak zmodyfikować zapytanie np.

select nazwa from test where nazwa = 'zolw'

...cos w tym stylu - a ma znalezc rekord ktory w nazwie ma żółw (z polskimi znakami)

W GOOGLE NIC SENSOWNEGO NIE MOGE ZNALEZC NA TEN TEMAT edit: a swoją drogą jak ładnie google indeksuje forum.php.pl - juz pojawiło sie w google na 1 pozycji z frazami ktore mnie interesują fiu fiu

Ten post edytował natasha 12.01.2010, 15:13:30
Go to the top of the page
+Quote Post
webdice
post
Post #4


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




  1. SELECT `field` FROM `table` WHERE `field` = 'zolw' COLLATE utf8_general_ci;


Oczywiście kodowanie sobie dobierz.
Go to the top of the page
+Quote Post
natasha
post
Post #5





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 10.11.2008

Ostrzeżenie: (0%)
-----


Cytat(webdice @ 12.01.2010, 15:44:15 ) *
  1. SELECT `field` FROM `table` WHERE `field` = 'zolw' COLLATE utf8_general_ci;

Oczywiście kodowanie sobie dobierz.


mam html i baze w utf8 czyli rozumiem ze dodaje
COLLATE utf8_general_ci

jednak to nic nie daje

w jaki sposob powyzsze zapytanie ma spowodowac wyswietlenie rekordu o wartosci field = 'zółw' questionmark.gif probuje ale nic nie daje - dlatego sie pytam

dodam ze nie mam zadnego problemu z kodowaniem na stronie i w bazie - po prostu szukam rozwiazania dla powyzszego problemu


problem podobny jak w http://forum.php.pl/lofiversion/index.php/t92631.html jednak tez bez rozwiazania

Ten post edytował natasha 12.01.2010, 16:12:08
Go to the top of the page
+Quote Post
Mchl
post
Post #6





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


FULL TEXT search w trybie niebinarnym olewa akcenty
Go to the top of the page
+Quote Post
webdice
post
Post #7


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Pokaż zrzut tabeli i przykładowy rekord.
Go to the top of the page
+Quote Post
natasha
post
Post #8





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 10.11.2008

Ostrzeżenie: (0%)
-----


Cytat(webdice @ 12.01.2010, 21:43:42 ) *
Pokaż zrzut tabeli i przykładowy rekord.


proszę:


CREATE TABLE IF NOT EXISTS `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nazwa` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;



INSERT INTO `test` (`id`, `nazwa`) VALUES
(1, 'żółw');
Go to the top of the page
+Quote Post
flashdev
post
Post #9





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Cytat(natasha @ 12.01.2010, 13:55:38 ) *
[...]
jak napisać select'a żeby wyjać powyższy rekord lecz w warunku żeby było WHERE NAZWA = 'zolwik'

czyli używając wyrazów bez polskich znaków znaleźć w bazie wyrazy z polskimi znakami.

Jest jakaś funkcja w mysql żeby zignorować polskie znaki podczas przeszukiwania bazy questionmark.gif


  1. function zamien($str){
  2. $old = array('e', 'o', 'a', 's', 'l', 'z', 'c', 'n', 'E', 'O', 'A', 'S', 'L', 'Z', 'C', 'N');
  3. $new = array('(e|ę)', '(o|ó)', '(a|ą)', '(s|ś)', '(l|ł)', '(z|ż|ź)', '(c|ć)', '(n|ń)', '(E|Ę)', '(O|Ó)', '(A|Ą)', '(S|Ś)', '(L|Ł)', '(Z|Ż|Ź)', '(C|Ć)', '(N|Ń)');
  4. return '^'.str_replace($old, $new, $str).'$';
  5. }


Takie coś kiedyś wymyśliłem. Przy wyszukiwaniu trzeba użyć regexp.
Pewnie nie jest to najlepsze rozwiazanie (powolne), ale w moim przypadku wystarczyło.


--------------------
Go to the top of the page
+Quote Post
natasha
post
Post #10





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 10.11.2008

Ostrzeżenie: (0%)
-----


jutro sprawdze ... tylko skoro to działa wolno to chyba w moim przypadku to moze nie zdac egzaminu - to ma służyć generowaniu linków czyli bedzie uzywane bardzo czesto


ps. po szybkim spojrzeniu widac ze ten kod tworzy wyrazenie regularne - tylko teraz jak połączyc to z zapytaniem mysql questionmark.gif

Ten post edytował natasha 13.01.2010, 00:01:59
Go to the top of the page
+Quote Post
flashdev
post
Post #11





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Cytat(natasha @ 12.01.2010, 23:44:46 ) *
jutro sprawdze ... tylko skoro to działa wolno to chyba w moim przypadku to moze nie zdac egzaminu - to ma służyć generowaniu linków czyli bedzie uzywane bardzo czesto


Chodzi o to, że 'LIKE' jest wolniejsze od '='. Najlepiej sama potestuj czasy.
A póki nie masz lepszego rozwiązania to zaimplementuj takie, bo funkcje masz już gotową winksmiley.jpg

Ten post edytował flashdev 13.01.2010, 00:25:48


--------------------
Go to the top of the page
+Quote Post
natasha
post
Post #12





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 10.11.2008

Ostrzeżenie: (0%)
-----


Cytat(flashdev @ 12.01.2010, 23:47:51 ) *
Chodzi o to, że 'LIKE' jest wolniejsze od '='. Najlepiej sama potestuj czasy.
A póki nie masz lepszego rozwiązania to zaimplementuj takie, bo funkcje masz już gotową winksmiley.jpg


a można użyć like albo = z wyrażeniem regularnym w zapytaniu questionmark.gif myślałam ,że można użyc tylko REGEXP w takiej sytuacji.
Go to the top of the page
+Quote Post
flashdev
post
Post #13





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Cytat(natasha @ 13.01.2010, 09:01:37 ) *
a można użyć like albo = z wyrażeniem regularnym w zapytaniu questionmark.gif myślałam ,że można użyc tylko REGEXP w takiej sytuacji.


Do zapytania regexp musisz użyć wyszukiwania 'REGEXP'. W poprzednim poście myślałem, że do tego jest 'LIKE', ale sam sie wprowadziłem w błąd bo miałem ustawiony inny typ danych w tabeli.
Tak na zdrowy rozsądek 'REGEXP' będzie jeszcze wolniejsze od 'LIKE',a le to już najlepiej sama przetestuj na swojej bazie danych.
W phpmyadmin masz podane czasy wykonywaia dla każdego zapytania sql.


--------------------
Go to the top of the page
+Quote Post
Mruss
post
Post #14





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 16.01.2010
Skąd: jakieś sugestie??

Ostrzeżenie: (0%)
-----


A nie jest przypadkiem zbyt dużo możliwości??
Nie lepiej będzie zrobić kolumnę z bezogonkowym odpowiednikiem słowa, które spolszczy słowo przy dodawaniu do tabeli??
sciana.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 00:02