LamaMASTER
3.08.2006, 21:23:34
Witam,
Mam zapytanie:
SELECT * FROM `tabela` WHERE `nazwa` NOT LIKE '1%' AND `nazwa` NOT LIKE '2%' AND `nazwa` NOT LIKE '3%' AND `nazwa` NOT LIKE '4%' AND `nazwa` NOT LIKE '5%' AND `nazwa` NOT LIKE '6%' AND `nazwa` NOT LIKE '7%' AND `nazwa` NOT LIKE '8%' AND `nazwa` NOT LIKE '9%' AND `nazwa` NOT LIKE '0%' AND `nazwa` NOT LIKE 'A%' AND `nazwa` NOT LIKE 'B%' AND `nazwa` NOT LIKE 'C%' AND `nazwa` NOT LIKE 'D%' AND `nazwa` NOT LIKE 'E%' AND `nazwa` NOT LIKE 'F%' AND `nazwa` NOT LIKE 'G%' AND `nazwa` NOT LIKE 'H%' AND `nazwa` NOT LIKE 'I%' AND `nazwa` NOT LIKE 'J%' AND `nazwa` NOT LIKE 'K%' AND `nazwa` NOT LIKE 'L%' AND `nazwa` NOT LIKE 'M%' AND `nazwa` NOT LIKE 'N%' AND `nazwa` NOT LIKE 'O%' AND `nazwa` NOT LIKE 'P%' AND `nazwa` NOT LIKE 'Q%' AND `nazwa` NOT LIKE 'R%' AND `nazwa` NOT LIKE 'S%' AND `nazwa` NOT LIKE 'T%' AND `nazwa` NOT LIKE 'U%' AND `nazwa` NOT LIKE 'V%' AND `nazwa` NOT LIKE 'W%' AND `nazwa` NOT LIKE 'X%' AND `nazwa` NOT LIKE 'Y%' AND `nazwa` NOT LIKE 'Z%'
Mam ok. 2000 pozycji w tej tabeli i są tam nazwy zaczynające się na polskie litery. Tabela ma kodowanie ustawione na UTF-8. Niestety zapytanie nic nie zwraca, nawet w phpMyAdminie nie wyświetla pozycji, które powinny zostać wyświetlone. Co tutaj jest źle?
SongoQ
4.08.2006, 09:02:46
Mozliwe w bazie sa innego kodowania. Lub jestes zalogowany i ustawione jest inne kodowanie.
nospor
4.08.2006, 09:12:25
ja w kwestii formalnej: co to ma do php? Przenosze
LamaMASTER
4.08.2006, 14:37:20
Kodowanie tu raczej nie ma znaczenia, skoro baza ma wyświetlić wszystko prócz wymienionych w zapytaniu znaków, więc obojętnie jak będą kodowanie ąśęś jak i tak powinno to wyświetlić
SongoQ
4.08.2006, 15:54:14
Jesli laczysz sie i klient wysyla kodowanie np w iso a ty masz w bazi utf-8 to ą w iso != ą w utf-8
LamaMASTER
4.08.2006, 16:06:29
Nie rozumiesz. Wiem jakie mam kodowanie plików, jakie strony, jakie bazy. Wszystko jest w UTF-8. Tak czy siak wszystko jedno jakie kodowanie, bo a == a chyba w każdym kodowaniu. A może w ISO a jest inne niż a w UTF? Bo z twojej wypowiedzi to właśnie idzie wywnioskować. Zauważ, że w zapytaniu nie ma polskich znaków, bo zapytanie ma wyciągać wszystkie pozycje z bazy, które jako pierwszą literę nie zawierają liter z normalnego alfabetu, jak też cyfr. Dlatego wszystko inne powinno zostać zwrócone, a tak nie jest.
mike22
4.08.2006, 17:16:20
select * from `tabela` where `nazwa` not like '1%' AND `nazwa` not like '2%' AND `nazwa` not like '3%' AND `nazwa` not like '4%' AND `nazwa` not like '5%' AND `nazwa` not like '6%' AND `nazwa` not like '7%' AND `nazwa` not like '8%' AND `nazwa` not like '9%' AND `nazwa` not like '0%' AND `nazwa`
Nioe jestem do końca pewien, ale:
1. Zamiast wyliczanki można chyba użyć >< działało by pewnie szybciej. Można też wykorzystać funkcję substring.
2. UTF-8 jest kodowany w kilku bajtach. Oznacza to, że pierwszy znak wcale nie musi być "nienormalny".
To co widzisz jako wynik przetwarzania nie jest tożsame z zapisem w bazie, bo zostało przetworzone przez a-bazę, b-php, c-przeglądarkę.
Głowy za to jednak nie dam :-)
LamaMASTER
4.08.2006, 19:59:28
Dzięki za odpowiedź

Ale jak robię przecież normalne zapytanie z WHERE `nazwa` LIKE `A%` to zwraca mi wszystkie nazwy na A, więc coś tu jest nie tak.
OK, poradziłem sobie z poziomu php - pobieranie wszystkiego i wyświetlanie tylko tych pozycji, które jako pierwszą literę nie mają jednej z tablicy. Jest git
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.