• 5 odgovora
  • 4.921 pregleda
Case-insensitive pretraga u PostgreSQL-u 30.03.2005. u 09:27 · pre 262 meseci #1
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]
Potpis
http://www.zgflex.org
Re: Korištenje funkcije strpos u izradi tražilice 30.03.2005. u 09:45 · pre 262 meseci #2
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')

Potpis
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
Re: Korištenje funkcije strpos u izradi tražilice 30.03.2005. u 11:30 · pre 262 meseci #3
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.
Potpis
http://www.zgflex.org
Re: Korištenje funkcije strpos u izradi tražilice 30.03.2005. u 13:15 · pre 262 meseci #4
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.
Potpis
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
Re: Case-insensitive pretraga u PostgreSQL-u 30.03.2005. u 16:05 · pre 262 meseci #5
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.

Potpis
http://www.zgflex.org
Re: Case-insensitive pretraga u PostgreSQL-u 31.03.2005. u 09:31 · pre 262 meseci #6
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.
Potpis
If Images - Royalty Free and Rights Managed
images
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme