Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: LEFT z BETWEEN
Forum PHP.pl > Forum > Bazy danych > MySQL
Zajec
Mam listę książek, każda ma swój title i chciałbym stworzyć listę literek alfabetu i przy każdej ilość książek, których tytuł na daną literkę się zaczyna. W tym celu użyłem WHERE left BETWEEN. Wszystko działa odpowiednio, dopóki nie próbuję wyciągnąć tytułów zaczynających się od cyfry.

Nie ma problemu, gdy wykonam zapytanie:
  1. SELECT * FROM `book` WHERE LEFT(title, 1) BETWEEN 1 AND 9
wyrzuca mi wtedy książdki typu:
101 nocy i dni
77 dni w ciszu
99 lokacji

Jednak gdy zmienię zapytanie na następujące (uwzględię zero)
  1. SELECT * FROM `book` WHERE LEFT(title, 1) BETWEEN 0 AND 9
wypluwa mi wszystkie rekordy tabeli.

Czy ktoś może powiedzieć co jest przyczyną oraz jak prawidłowo wyciągnąć title zaczynające się od cyfry?


Kod
MySQL - 5.0.15-standard
Wersja protokołu: 10
Serwer: Localhost via UNIX socket
Użytkownik: zajec@localhost
System kodowania znaków dla MySQL: UTF-8 Unicode (utf8)
nospor
skoro to mysql to rzucamy to na mysql

Nie mam teraz dostepu do bazki, ale left zwraca ci znak (string), wiec chyba powinienes to warunkowac stringami
Zajec
Faktycznie, potraktowałem zero jako string i działa dobrze:
  1. SELECT * FROM `filmy` WHERE LEFT(title, 1) BETWEEN 1 AND 9 OR LEFT(title, 1)="0"
Tylko czemu zero jest takie wyjątkowe? :--|
kwiateusz
bo o ile się nie mylę 0 domyslnie chyba oznacza null ...
nospor
Bo to jest tak, ze gdy porownujemy string z intem, to string zamieniany jest na inta.
No i teraz '1' zamienia sie na 1, '2' = 2
ale litera zamieniana jest na 0: 'a' =>0, 'b' => 0
No i w rezultacie przyrownianie litery do 0 da nam zawsze true smile.gif
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.