mysql select like

Az a problémám, hogy ha like '%o%' -t keresek mysqlben a találatokhoz behozza a 'ő, ö, ó' -t is.
Valaki találkozott már hasonló problémával?

Hozzászólások

megfelelo charset + lower + binary?

t

Látszik, hogy nem értesz hozzá, csak úgy fikázol orrbaszájba mindenhol.
hungarian collation visszaadja az ékezetes változatokat is, a csak bináris fog bináris hasonlítást végezni.
Tudom, ez neked új, de a Unicode pont erre lett kitalálva...

google://collate

Nem feltetlenul kell a tablanak binarisnak lennie, eleg, ha a collate az.. persze ha a tabla binaris, akkor a default collate is az lesz.
Ha vegyesen akarod hasznalni (lekerdezesenkent mas), akkor jobban jarsz, ha a query vegen megadod. Amugy beallithatod a tablara/mezore vonatkozoan is.

szerk: csak hogy ne kelljen keresned:
http://dev.mysql.com/doc/refman/5.0/en/charset-collate.html

--
"Digital content is not a tangible good and should not be subject to the same liability rules as toasters." - Francisco Mingorance, BSA

Nekem olyan bajom van, hogy van egy MySql táblám, amiben ilyenek vannak:
1,2,3,7,8,12,11,22,23,26,24,29,25,33
és van egy lekérdezésem így: w_cat LIKE '%1%' AND w_cat LIKE '%3%'

Na most az a bajom, hogy nekem csak az az adott érték kellene, ami a pontos érték, nem pedig a 12, 22 ott, ahol csak a 2 kellene, stb. Remélem, érthető, már napok óta alig aludtam - lehet ezért sem látom a megoldást, lenne valakinek ötlete, mivel pontosíthatom a keresést?

Kérdezésekkel ilyenkor már bajban vagyok még magam felé is :)
Igen, a w_cat egy karakter típus, alább a full kód.
Érték $id így jön be a php-ból:
1_3_22_34_

$KeresErt = explode('_', $id);
$KeresErtTomb = array();

foreach ($KeresErt as $miatosz) {
$miatosz = trim($miatosz);
if (!empty($miatosz)) {
$KeresErtTomb[] = "w_cat LIKE '%$miatosz%'"; // ez legyen a '%,$miatosz,%' ? de a táblában nem vesszővel kezdődneka számok :S
}
}

$keres=implode(' AND ', $KeresErtTomb);
$query = "SELECT * FROM " . $sql_prefix . "_products WHERE ".$keres." order by p_name asc";

A sorozatból kell egy-egy érték, ami viszont meg kel egyezzen a bejövő adatból kapott értékkel. A between azért nem jó, mert nem egy tartomány kell, hanem a sorozatból egy-egy pontos érték. Lehet a megközelítés rossz, de akkor ha valakinek van ötlete, örömmel fogadnám.

Nekem ugy tunik, hogy a kerdezo egy TOMBOT tesz bele az adott mezobe, es ebben probal utana like-al adott ertekre keresni. Ahelyett, hogy tenylegesen tomb tipusu lenne az adott oszlop (pl. postgres tud ilyet, mysql fejlodeset mar par eve nem kovetem), vagy hogy tisztesseges modon letrehozna egy uj tablat, amit meg indexelni is tud, es nem nezne vegig minden lekerdezeskor minden sort.
Most viszont a szeparatorral is like-okkal sziv, mert a jelenlegi tombemulacioja ezt teszi lehetove.

--
hungarian up portal - sj

Ja, hogy egy lehetseges megoldast is irjak - ami persze rosszabb, mint az array:

w_cat LIKE '%1%' AND w_cat LIKE '%3%'
helyett:
(w_cat LIKE '%,1,%' or w_cat LIKE '1,%' or w_cat LIKE '%,1') AND
(w_cat LIKE '%,3,%' or w_cat LIKE '3,%' or w_cat LIKE '%,3')

Ha a tomb elejere es a vegere is tennel szeparatort, pl:
,1,2,3,7,8,12,11,22,23,26,24,29,25,33,
Akkor egyszerubb lenne:
w_cat LIKE '%,1,%' AND w_cat LIKE '%,3,%'
(vagy ha a mysql gyorsan tud oszlophoz fuzni, lehet on-thy-fly is)

Egyebkent ez a like-os megoldas (vagy ugy kb. barmelyik ami like-ot hasznal tombokhoz) nagyon hamar nagyon lassuva fog valni ha megtomod adatokkal.

--
hungarian up portal - sj