MySQL SELECT parancs LIKE feltétellel
Sziasztok.
Van egy problémám a MySQL lekérdezéssel kapcsolatban.
Ha a SELECT mezo FROM adatbazis WHERE mezo LIKE 'A%' lekérdezést futtatom, akkor a rendszer visszaadja az A-val és az Á-val kezdődő mezőtartalmakat is, holott csak az A-val kezdődőeket kellene visszadnia. Van valakinek valamilyen ötlete? Szerintem a MySQL konfigurációban kellene valamit beállítani, de nem vagyok biztos benne. Előre is köszönöm az ötleteket...
Zoli
■ Van egy problémám a MySQL lekérdezéssel kapcsolatban.
Ha a SELECT mezo FROM adatbazis WHERE mezo LIKE 'A%' lekérdezést futtatom, akkor a rendszer visszaadja az A-val és az Á-val kezdődő mezőtartalmakat is, holott csak az A-val kezdődőeket kellene visszadnia. Van valakinek valamilyen ötlete? Szerintem a MySQL konfigurációban kellene valamit beállítani, de nem vagyok biztos benne. Előre is köszönöm az ötleteket...
Zoli
binary
a rendszer visszaadja az A-val és az Á-val kezdődő mezőtartalmakat is
Tabla definiciot tudsz mutatni? Nem lehet, hogy az a mezo binary-val van definialva?
Felho
Tábladefinició
Egy térképészeti témájú alkalmazást írok, amelyben többek között településeket lehet kiválasztani kezdőbetű alapján. A kezdőbetűt egy listában sorolom fel (A, Á, B, ...)
A megfelelő tábladefinició a következő, varchar-t használok a szöveg alapú adatokhoz:
CREATE TABLE settlements (
settlement varchar(30) NOT NULL default '',
county varchar(30) NOT NULL default '',
geoh double NOT NULL default '0',
geov double NOT NULL default '0',
PRIMARY KEY (settlement),
UNIQUE KEY settlement (settlement)
) TYPE=MyISAM;
Egy php fájlban a lekérdezést így valósítom meg:
A $letter nev nevű változóba érkezik a kezdőbetű. Figyelem továbbá, hogy a C-nél ne kapjunk vissza Cs-vel kezdődőeket, stb.
...
$letter = $_POST["letter"];
$exletter = "";
switch ($letter) {
case "C":
$exletter = "Cs";
break;
case "Cs":
$exletter = "C";
break;
case "G":
$exletter = "Gy";
break;
case "Gy":
$exletter = "G";
break;
case "L":
$exletter = "Ly";
break;
case "Ly":
$exletter = "L";
break;
case "N":
$exletter = "Ny";
break;
case "Ny":
$exletter = "N";
break;
case "S":
$exletter = "Sz";
break;
case "Sz":
$exletter = "S";
break;
case "T":
$exletter = "Ty";
break;
case "Ty":
$exletter = "T";
break;
case "Z":
$exletter = "Zs";
break;
case "Zs":
$exletter = "Z";
break;
default:
$exletter = "";
}
// lekerdezoparancs
$getsettlementlistcommand = "SELECT settlement, geoh, geov FROM settlements WHERE settlement LIKE '$letter%'";
if ($exletter != "") {
$getsettlementlistcommand .= " AND settlement NOT LIKE '$exletter%'";
}
...
Az alkalmazás egyenlőre csak teszt jelleggel fut, 1 : 50 000 méretarányú térképekre. Így nem minden funkció működik még a keresésben.
http://www.topomap.hu/mapnavigator/hun/mapnavigator.html
Elképzelhető, hogy a MySQL-ben kell valamit beállítani?
Köszi a segítséget...
Zoli
--------------
Varanka Zoltán
www.novolibro.hu/novolortal
--------------
Szerintem utf kódolást hasz
UTF kódolás
--------------
Varanka Zoltán
www.novolibro.hu/novoportal
--------------
UTF kódolás
Esetleg kiíratásnál csinálj egy szűrést. Megvban az adatbázisból visszakapott eredményed, és csak azokat a sorokat iratod ki, amelyik neked tetszetősek. Mondjuk leválasztod az első karaktert, és erre csinálsz egy ellenőrzést, de vigyázz, hogy utf-8 kódolásnál egy karakter több bájtból is állhat. De lehet, hogy egy egyszerű < viszgálat is megteszi, és nem kell bajlódni az első karakter leválasztásával.
Ha unicode kódolással tárolod a karaktereket a MySql 4.0.xx adatbázisban, akkor a mezőt állítsd BINARY-ra, egyébként a tábla javításánál, optimalizációjánál elbarmolja a karaktereket.
balti
Köszönöm az ötletet! Szer
--------------
Varanka Zoltán
www.novolibro.hu/novoportal
--------------
Nekem igy mukodik jol
`aaa` varchar(10) binary NOT NULL default ''
)
Próbáld ki, mi bajod lehet :)
Mégse
Köszi a választ, mindenkép
--------------
Varanka Zoltán
www.novolibro.hu/novoportal
--------------
rtfm rulz
--
slink
Nem a kódolásról van szó