Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: WHERE field = 0 !?
Forum PHP.pl > Forum > Bazy danych > MySQL
kartun11
Witam,
mam cholernie dziwny problem z pewnym zapytaniem...

  1. SELECT * FROM (`ZAT_Users`) WHERE `user_sid` = 0 LIMIT 1

Zwraca mi rekord z bazy, problem w tym, że pole user_sid ma wartość, jest nią suma md5.

Tak samo z innym zapytaniem...
  1. SELECT * FROM (`ZAT_Users`) WHERE `user_email` = 0 LIMIT 1

Też zwraca wynik, ale w polu jest adres email, a nie 0...

Gdy jednak wykonuję
  1. SELECT * FROM (`ZAT_Users`) WHERE `user_email_hash` = 0 LIMIT 1

Nie ma żadnego rekordu. A pole identyczny typ jak pole user_sid, też zawiera sumę md5.

Nigdy się z czymś takim nie spotkałem i nie mam pojęcia co może być nie tak.

Pola zostały stworzone tym zapytaniem
  1. ...
  2. user_sid VARCHAR(32) COLLATE utf8_general_ci NOT NULL
  3. ...


Oczywiście wyniki zwracane są prawidłowo, gdy potraktuję 0 jako string, ale dlaczego wyniki są zwracana w innym wypadku.
nospor
Bo to jest pole tekstowe wiec nalezy je przyrownywac do tekstu a nie liczby....
SELECT * FROM (`ZAT_Users`) WHERE `user_sid` = '0' LIMIT 1
wookieb
1) Podaj wersję mysql
2) Jeżeli jest to mała tabela daj nam ją w formie zapytania (eksport w phpmyadmin) - tylko ukryj wrażliwe dane
nospor
Cytat
Oczywiście wyniki zwracane są prawidłowo, gdy potraktuję 0 jako string, ale dlaczego wyniki są zwracana w innym wypadku.
Bo nie mozna porownac tekstu do liczby. Mysql wiec rzutuje twoje pole tekstowe na liczbę. A tekst po zrzutowaniu na liczbe to 0 wiec porównujesz 0 z 0 wiec masz true smile.gif
kartun11
Cytat(nospor @ 30.09.2010, 12:44:22 ) *
Bo to jest pole tekstowe wiec nalezy je przyrownywac do tekstu a nie liczby....
SELECT * FROM (`ZAT_Users`) WHERE `user_sid` = '0' LIMIT 1


Ale w drugim przypadku gdy operowałem na takim samym typie pola, wartości nie zwróciło mimo przyrównania do liczby 0.

Wersja MySQL to 5.0.45.
nospor
Cytat
Ale w drugim przypadku gdy operowałem na takim samym typie pola, wartości nie zwróciło mimo przyrównania do liczby 0.
Ale tam miales hasha, a hash pewnie wygladal mniej wiecej tak:
12blabla
pierwsze znaki to liczby. Konwersja takiego tekstu da ci 12 a 12 to nie jest 0 wiec dalo ci false.
smile.gif
kartun11
Ah, więc chodziło o sposób w jaki MySQL przechodzi między typami danych. Nie miałem pojęcia, że jest to realizowane w taki sposób.
Aż wstyd się przyznać, że SQL znam od kilku lat ^^"
nospor
W identyczny sposób działa to w php
'aa' == 0 //true
'12aaa' == 0 //false
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.