[ Ivan Golubović @ 02.01.2012. 11:10 ] @
Pitanje je jednostavno, dok verujem da odgovor i nije toliko...

Potrebno mi je da ignorišem neke karaktere, koji su možda uneti u bazu, prilikom pretrage kao npr. razmak, tačke, crtice...

Kako da napravim SELECT upit koji pretražuje POLJE1 za string npr. 32pfl540312 i za rezultat nalazi 32 PFL-5403/12?
[ nkrgovic @ 02.01.2012. 19:34 ] @
Za case moze da resis tako sto kaze da je collation case insensitive. Za takav search, mozda nesto kao SELECT * FROM TABLE WHERE POLJE1 LIKE "32%pfl%5403%12" ?
[ bogdan.kecman @ 02.01.2012. 21:56 ] @
auuuuuuuu ...

jedino sto mozes da probas je soundex:

Code:

mysql> select soundex('32pfl540312'), soundex('32 PFL-5403/12');
+------------------------+---------------------------+
| soundex('32pfl540312') | soundex('32 PFL-5403/12') |
+------------------------+---------------------------+
| P400                   | P400                      |
+------------------------+---------------------------+
1 row in set (0.00 sec)


[ nkrgovic @ 02.01.2012. 22:25 ] @
To se, nagadjam (nikad probao soundex) indexira isto kao LIKE '%NESTO%' na text polju? :)

A da probas neki full text search softver van mysql-a?
[ Ivan Golubović @ 02.01.2012. 22:50 ] @
Pronašao sam rešenje... Dok ne nađemo bolje, duplirao sam kolonu nad kojim treba da se vrši pretraživanje, korišćenjem funkcije(PHP)
Code:
function text_index($text)
{
    $trazi = array(""", "&", "<", ">", " ", "@");
    $html_free = str_replace($trazi, "", $text);
    $trazi = array(" ", "/", "\\", "'", "\"", "-", "_", "&", ",", ";", ":", ".", "&");
    $rezultat = str_replace($trazi, "", $html_free);
    return $rezultat;
}
Sam sam je pisao i ubacivao promenljive. Meni završava posao, možda će još nekome...
[ bogdan.kecman @ 03.01.2012. 04:41 ] @
Citat:
nkrgovic: To se, nagadjam (nikad probao soundex) indexira isto kao LIKE '%NESTO%' na text polju? :)


soundex je funkcija kao svaka druga, rezultati funkcija se ne indexiraju (ne mozes unapred da znas rezultat funkcije). Ono sto mozes je da cuvas vrednost soundex-a u istoj tabeli pa da radis select ... where tabela.soundexvrednost = soundex('stavectrazis') ... to prilicno dobro radi posebno kod takvih zahteva kao sto je op napisao, posebno zato sto ce ti vratiti i "slicne" stringove :) .. probaj, to je mnogo dobra funkcija za tekst pretragu
[ Ivan Golubović @ 03.01.2012. 10:29 ] @
Nemam poverenja u soundex, jer ne daje tačne već približne rezultate. U mom slučaju je izuzetno bitna preciznost... Mislim da dupliranje kolone nije problem i da je najbrže rešenje...
Code:
$sql = "SELECT polje FROM tabela WHERE polje_bez_znakova LIKE '".text_index($string)."';
[ bogdan.kecman @ 03.01.2012. 13:54 ] @
zasto LIKE ?!
[ Ivan Golubović @ 03.01.2012. 14:53 ] @
> Kod mene ima %...%, ali sam ovde po automatizmu napisao bez...
[ bogdan.kecman @ 03.01.2012. 16:09 ] @
ako vec pravis dodatnu kolonu, onda ocistis trailing i leading spaces i radis =. Jasno ti je da LIKE ne koristi nijedan index i da svaki upit radi full table scan.