ugrás a tartalomhoz

lekérdezés pontos egyezéssel (kis-nagybetűk tekintetében)

a.d.a.m · 2006. Május. 31. (Sze), 08.44
Sziasztok!

Egy nagy-nagy problémával állok szemben, szeretnék egy olyan adatbázislekérdezést véghezvinni, amely megvizsgálja, hogy az adott cellában lévő adat megegyezik-e a felhasználó által megadottal vagy sem.

Ez így egyszerűnek tűnik, de nekem mégsem sikerült tökéletesen a megvalósítás, mert az általam készített parancssor nem tesz külömbséget a kis- és nagybetűk között, pedig ez lenne a lényeg.

A kód a következő:
SELECT * FROM tabla WHERE mezo1='".$_POST['mezo1']."' AND mezo2='".$_POST['mezo2']."'"
(a kód php-ban kerülne felhasználásra, ezért a ".$_POST['mezo1']." érték.

Előre is köszönöm a segítségeteket.

a.d.a.m
 
1

2 ötlet

VBala · 2006. Május. 31. (Sze), 09.15
Először az jutott eszembe, hogy ellenőrizd utána a lekérdezett értéket php-ból is, de aztán megtaláltam ezt a mysql manualban:
The following two statements illustrate that string comparisons are not case sensitive unless one of the operands is a binary string:
mysql> SELECT 'abc' LIKE 'ABC';
        -> 1
mysql> SELECT 'abc' LIKE BINARY 'ABC';
        -> 0
3

kipróbáltam

a.d.a.m · 2006. Május. 31. (Sze), 09.25
és tökéletesen működik, köszönöm!
4

tökéletes? müködik.

Balogh Tibor · 2006. Május. 31. (Sze), 10.10
és tökéletesen működik, köszönöm!
Azért mégsem annyira tökéletes... A binary operátort alkalmazva nem használja az indexeket. Ezért érdemesebb ezt a tábla létrehozásakor megadni, vagy módosítani. Így már használni fogja az indexet is, és az eredeti lekérdezésed is "case sensitive" módon fog futni.

CREATE TABLE tabla (
	mezo1 VARCHAR(20) BINARY NOT NULL,
	mezo2 VARCHAR(20) BINARY NOT NULL,
	
	INDEX mezo1 (mezo1),
	INDEX mezo2 (mezo2)
);
vagy
ALTER TABLE
	tabla
CHANGE
	mezo1
	mezo1 VARCHAR(20) BINARY NOT NULL;

SELECT
	*
FROM
	tabla
WHERE
	mezo1='".$_POST['mezo1']."' AND
	mezo2='".$_POST['mezo2']."'"
2

google...

talger · 2006. Május. 31. (Sze), 09.19