Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Case-insensitive pretraga u PostgreSQL-u

[es] :: PHP :: Case-insensitive pretraga u PostgreSQL-u

[ Pregleda: 3888 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

cartmanlee
cartmanlee
FLEX/PHP specijalist, Adobe UG Manager
Zagreb

Član broj: 50997
Poruke: 436
*.xnet.hr.

Sajt: www.zgflex.org


+1 Profil

icon Case-insensitive pretraga u PostgreSQL-u30.03.2005. u 09:27 - pre 232 meseci
Radim tražilicu za site i potrebno je pretraživati brodove i vlasnike brodova. Zapisi se nalaze u bazi No stvar ne funkcionira kako bi trebala.

Prvi problem:
ako koristim SQL upit da pronađem brod "Brod", onda rezultat neću dobiti ako upišem "brod". Problem sam riješio tako što sam prvo izvukao sve brodove iz baze i onda sa strpos pregledavao da li dohvaćeni zapis sadrži niz "Brod". Za svaki slučaj koristim i SQL i ovaj drugi način.

Drugi problem:
Ako tražim ime vlasnika, npr. "Željko", stvar ne funkcionira, jer strpos ne funkcionira svaki put kada imam neke "hrvatske" znakove.

Da li netko ima ideju kako rješiti ovaj problem?

[Ovu poruku je menjao Goran Rakić dana 30.03.2005. u 14:16 GMT+1]
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Korištenje funkcije strpos u izradi tražilice30.03.2005. u 09:45 - pre 232 meseci
U MySQL-u kada koristis LIKE nad poljima koja su Varchar ili Text, upit je automatski case-insensitive tako da ne bi trebalo da bude problema
http://dev.mysql.com/doc/mysql/en/case-sensitivity.html

Ako bas moras da koristis SELECT umesto LIKE-a, onda mozes da upotrebis nesto nalik na:
Code:
SELECT * FROM table WHERE lcase(ime)=lcase('Broj')


http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

cartmanlee
cartmanlee
FLEX/PHP specijalist, Adobe UG Manager
Zagreb

Član broj: 50997
Poruke: 436
*.xnet.hr.

Sajt: www.zgflex.org


+1 Profil

icon Re: Korištenje funkcije strpos u izradi tražilice30.03.2005. u 11:30 - pre 232 meseci
Citat:
U MySQL-u kada koristis LIKE nad poljima koja su Varchar ili Text, upit je automatski case-insensitive tako da ne bi trebalo da bude problema
http://dev.mysql.com/doc/mysql/en/case-sensitivity.html


Koristim PostgreSQL.
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Korištenje funkcije strpos u izradi tražilice30.03.2005. u 13:15 - pre 232 meseci
A kako sam ja to mogao da znam?
Stvarno, kada cete vec da se naucite da svoj problem detaljno opisete, koristeci realan primer, u realnom okruzenju,...

Odgovor: http://www.devdaily.com/blog/Content/2/7/62/
Odgovor 2: Google: PostgreSQL case insensitive: http://www.google.com/search?q=PostgreSQL+case+insensitive

Takodje sam ti izmenio i naslov teme, kako bi drugi mogli preko pretrage lakse naci.

http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

cartmanlee
cartmanlee
FLEX/PHP specijalist, Adobe UG Manager
Zagreb

Član broj: 50997
Poruke: 436
*.xnet.hr.

Sajt: www.zgflex.org


+1 Profil

icon Re: Case-insensitive pretraga u PostgreSQL-u30.03.2005. u 16:05 - pre 232 meseci
OK, take it easy. Post sam napisao nabrzaka jer sam bio u gužvi.

Našao sam rješenje. Prvo je sa ovim pattern matching operatorima

SELECT ime FROM clanovi WHERE ime ~* 'Željko';

Kao što postoji lcase funkcija u MySQL, tako u PostgreSQLu postoji lower funkcija koja sva slova pretvara u mala.

Međutim, problem nije bio u SQL upitima, nego u tome što su admini nedavno radili neke promjene na PgSQL serveru, pa su na podesili client_encoding na SQL_ASCII, a ne na LATIN2. Prije nekih mjesec dana sam podesio client_encoding na LATIN2, ali očito je NETKO to promijenio. Sad sam za svaki slučaj ubacio dodatni SQL naredbu u index.php.


 
Odgovor na temu

The Sekula

Član broj: 53829
Poruke: 76
*.eunet.co.yu.

Sajt: www.sekulovic.net


Profil

icon Re: Case-insensitive pretraga u PostgreSQL-u31.03.2005. u 09:31 - pre 232 meseci
Mislim da je generalno lose resenje za ovakve stvari se oslanjati na podrsku same baze, pogotovo ako recimo imate veliki broj zapisa, te vam je koriscenje indeksa neophodno.

Kada mi je potrebno case-insensitive i "nasa slova"-insensitive pretrazivanje najcesce mi se kao najbolje resenje pokazalo dodavanje novog polja gde bi prilikom insert-a i update-a kesirali vrednost polja koje se pretrazuje, tako sto se nasa slova zamene sa ccszdj i ceo string prebaci u lower-case. Polje se lepo indeksira, a resenje je nezavisno od DB platforme. Postoji doduse i drawback, a to je da ako pretrazujete po "ćerka" dobicete i zapise gde se pominje "čerka", ali to se moze smatrati i kao feature ;-).


Slicno resenje se moze primeniti, ako je recimo potrebno pretrazivanje po kraju stringa, a nije moguce indeksirati po funkciji. Tada u takvo dodatno polje se upise string sa karakterima u obrnutom redosledu, te se i ono moze "normalno" indeksirati.


Sem za pretrazivanje, ovakva polja su zgodna i za sortiranje.

 
Odgovor na temu

[es] :: PHP :: Case-insensitive pretraga u PostgreSQL-u

[ Pregleda: 3888 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.