Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wybieranie tytułów na określone litery - pomocy
Forum PHP.pl > Forum > Bazy danych > MySQL
bboymietek
Witam. Proszę o pomoc. Potrzebuje instrukcje select która wyciągnie mi z bazy pola których tytuły są z przedziału:

Tytuły na litery od a do g,
Tytuły na litery od g do p,
Tytuły na litery od p do ż

Proszę o podpowiedzi.

markuz
Spróbuj tak:
  1. WHERE tytul REGEXP '^[a-g]'

itd.
bboymietek
Niestety nic to nie daje. Problem jest w tym że nie wykrywa to polskich znaków.
Jeżeli będę miał tytuł na literę ż, ź czy ł to nie zostanie on pobrany z bazy.
Proszę o następne popdpowiedzi
Turson
Cytat
Tytuły na litery od a do g,

  1. WHERE tytul LIKE "a%" OR tytul LIKE "g%"
Pyton_000
@Turson idź się przespać wink.gif

CO do polskich liter to dodaj sobie do tego regexp:
^[a-gąćę]

i powinno zadziałać.
bboymietek
niestety jeżeli używam tego selecta to np przy zapytaniu : ^[s-zśżź]
to wyskakują mi też tytuły które np litere "ś" mają w środku a nie na początku.

Co robić?
Pyton_000
pokaż zapytanie
bboymietek
$zapytanie= "SELECT * FROM filmy WHERE tytul REGEXP '^[$literaPierwsza-$literaDruga$polskie]' ";
Pyton_000
A przetworzone ?
bboymietek
$zapytanie= "SELECT * FROM filmy WHERE tytul REGEXP '^[p-zśżź]' ";
Pyton_000
W takim masz złe kodowanie tabeli/kolumny
Zobacz jakie masz kodowanie. Ja stworzyłem na utf8_polish_ci i działa tak jak powinno.
bboymietek
spróbuj dodac do bazy wpis na litery ś lub ł i jeżeli w tytule bedzie np łódź a zrobie selecta takiego:

SELECT * FROM filmy WHERE tytul REGEXP '^[p-zżź]'

to otrzymam w wynikach tytul łódź którego nie powinno być bo mialy być tytuły które na początku mają litere z przedziału p-z i kodowanie zmienilem na polish ale to nie pomaga.

proszę o następne podpowiedzi
Pyton_000
Daj zrzut z BD struktura i przykładowe dane
Crozin
1. Nie korzystaj z wyrażeń regularnych tutaj, chyba że chce Ci się wpisywać wszystkie litery z dziesiątek alfabetów świata.
2. Wszystko co musisz mieć to poprawnie ustawiony system porównywania znaków (np. na utf8_[unicode|general|polish]_ci) i proste zapytanie:
  1. SELECT ... FROM tbl_name WHERE LEFT(title_col_name, 1) BETWEEN 'a' AND 'g'


PS. IIRC MySQL od lat jest skopany i ma problem z poprawną obsługą litery "Ł". EDIT: http://stackoverflow.com/a/3506373/252591
Xelah
Cytat(Crozin @ 16.06.2015, 13:44:12 ) *
PS. IIRC MySQL od lat jest skopany i ma problem z poprawną obsługą litery "Ł".


To, o czym piszesz odnosi się tylko do utf8_general_ci. I nie jest to bug. To po prostu jest zgodne ze standardem (http://www.unicode.org/Public/UCA/4.0.0/allkeys-4.0.0.txt). Żeby Ł===L można użyć na przykład "utf8_unicode_520_ci" (bodajże od 5.6).
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.