Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> wybieranie tytułów na określone litery - pomocy
bboymietek
post 27.05.2015, 10:26:52
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 27.05.2015

Ostrzeżenie: (0%)
-----


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.

Go to the top of the page
+Quote Post
markuz
post 27.05.2015, 10:53:28
Post #2





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


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

itd.


--------------------
Go to the top of the page
+Quote Post
bboymietek
post 31.05.2015, 00:03:17
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 27.05.2015

Ostrzeżenie: (0%)
-----


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

Ten post edytował bboymietek 31.05.2015, 00:03:58
Go to the top of the page
+Quote Post
Turson
post 31.05.2015, 18:33:03
Post #4





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Cytat
Tytuły na litery od a do g,

  1. WHERE tytul LIKE "a%" OR tytul LIKE "g%"
Go to the top of the page
+Quote Post
Pyton_000
post 31.05.2015, 18:49:42
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


@Turson idź się przespać wink.gif

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

i powinno zadziałać.
Go to the top of the page
+Quote Post
bboymietek
post 9.06.2015, 17:12:36
Post #6





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 27.05.2015

Ostrzeżenie: (0%)
-----


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ć?
Go to the top of the page
+Quote Post
Pyton_000
post 9.06.2015, 18:20:34
Post #7





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


pokaż zapytanie
Go to the top of the page
+Quote Post
bboymietek
post 11.06.2015, 22:22:25
Post #8





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 27.05.2015

Ostrzeżenie: (0%)
-----


$zapytanie= "SELECT * FROM filmy WHERE tytul REGEXP '^[$literaPierwsza-$literaDruga$polskie]' ";
Go to the top of the page
+Quote Post
Pyton_000
post 11.06.2015, 22:25:03
Post #9





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


A przetworzone ?
Go to the top of the page
+Quote Post
bboymietek
post 12.06.2015, 13:01:59
Post #10





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 27.05.2015

Ostrzeżenie: (0%)
-----


$zapytanie= "SELECT * FROM filmy WHERE tytul REGEXP '^[p-zśżź]' ";
Go to the top of the page
+Quote Post
Pyton_000
post 13.06.2015, 10:06:18
Post #11





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
bboymietek
post 15.06.2015, 17:46:30
Post #12





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 27.05.2015

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Pyton_000
post 16.06.2015, 12:36:38
Post #13





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Daj zrzut z BD struktura i przykładowe dane
Go to the top of the page
+Quote Post
Crozin
post 16.06.2015, 12:44:12
Post #14





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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

Ten post edytował Crozin 16.06.2015, 12:46:52
Go to the top of the page
+Quote Post
Xelah
post 16.06.2015, 13:21:03
Post #15





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 12.05.2013
Skąd: Hamburg

Ostrzeżenie: (0%)
-----


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).
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.07.2025 - 22:24