🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.php
18 messages
18 total messages Started by Piotr Burda Tue, 28 Aug 2001 12:46
select zaczynajace sie na litery
#1439
Author: Piotr Burda
Date: Tue, 28 Aug 2001 12:46
9 lines
1265 bytes
Mam problem, skrypt wyswietla mi z bazy linki (do miejscowosci)
jest tego duzo i wyswietlanie trwa  dosc dlugo poza tym lista jest zbyt
dluga.
poniewaz sa to nazwy miejscowosci wiec wpadlem na pomysl ze ogranicze
kryterium i podziele liste na grupy
np miescowosci od A do F potem od G do L ....
i tu powstal problem, jak wykonac select by baza zwracala takie wyniki
PHP i MySQl
Piotr
Re: select zaczynajace sie na litery
#1440
Author: Rafal Neumann
Date: Tue, 28 Aug 2001 12:57
15 lines
1469 bytes
Użytkownik "Piotr Burda" <poczta@narty.pl> napisał w wiadomości
news:9mg3p5$fd0$1@news.tpi.pl...
> Mam problem, skrypt wyswietla mi z bazy linki (do miejscowosci)
> jest tego duzo i wyswietlanie trwa  dosc dlugo poza tym lista jest zbyt
> dluga.
> poniewaz sa to nazwy miejscowosci wiec wpadlem na pomysl ze ogranicze
> kryterium i podziele liste na grupy
> np miescowosci od A do F potem od G do L ....


zrob kolumny A-F G-L i tak daje do kazdej wpisz dane a pozniej pobieraj
tylko cala kolumne

Rafal Neumann
Re: select zaczynajace sie na litery
#1441
Author: Piotr Burda
Date: Tue, 28 Aug 2001 13:07
11 lines
1158 bytes
>
>
> zrob kolumny A-F G-L i tak daje do kazdej wpisz dane a pozniej pobieraj
> tylko cala kolumne
>
> Rafal Neumann
>
To rozwiazanie strasznie by utrudnilo pozniej dopisywanie nowych danych, no
i wymagalo by zmiany aktualnych.
Piotr
Re: select zaczynajace sie na litery
#1443
Author: Piotr Burda
Date: Tue, 28 Aug 2001 13:08
14 lines
1178 bytes
> SELECT
>     nazwa
> FROM
>     miejscowosci
> WHERE
>     (LOWER(nazwa) REGEXP '^[abcćdef].*')
> ORDER BY nazwa
>
>
> P.S. Jeśli ktoś zna wydajniejszy sposób to proszę o korektę.
>
> slawek-
czy ta metoda znacznie wplynie na wydajnosc?
Piotr
Re: select zaczynajace sie na litery
#1442
Author: slawek-
Date: Tue, 28 Aug 2001 14:01
19 lines
1259 bytes
"Piotr Burda" <poczta@narty.pl> napisał:
> poniewaz sa to nazwy miejscowosci wiec wpadlem na pomysl ze ogranicze
> kryterium i podziele liste na grupy
> np miescowosci od A do F potem od G do L ....
> i tu powstal problem, jak wykonac select by baza zwracala takie wyniki
> PHP i MySQl

SELECT
    nazwa
FROM
    miejscowosci
WHERE
    (LOWER(nazwa) REGEXP '^[abcćdef].*')
ORDER BY nazwa


P.S. Jeśli ktoś zna wydajniejszy sposób to proszę o korektę.

slawek-
Re: select zaczynajace sie na litery
#1444
Author: Michal Sznajder
Date: Tue, 28 Aug 2001 15:08
26 lines
1696 bytes
Witam 

Napisane przez "Piotr Burda" <poczta@narty.pl>  w pl.comp.lang.php
>> SELECT
>>     nazwa
>> FROM
>>     miejscowosci
>> WHERE
>>     (LOWER(nazwa) REGEXP '^[abcćdef].*')
>> ORDER BY nazwa
>> P.S. Jeśli ktoś zna wydajniejszy sposób to proszę o korektę.

Warto tez sprawdzic cos takiego 

select ....
where lower(nazwa) like 'a%' or lower(nazwa) like 'b%' ... itd

> czy ta metoda znacznie wplynie na wydajnosc?

Ograniczy liczbe rekordow w zapytaniu wynikowym wiec wyswietlanie powinno 
odbywac sie szybciej ...

-- 
Pozdrawiam 
	Michal "Misza" Sznajder
[  http://www.fxmedia.com.pl/ ]
Re: select zaczynajace sie na litery
#1456
Author: 7th Wojciech Jukowski
Date: Tue, 28 Aug 2001 15:28
11 lines
1122 bytes
witam,

Piotr Burda wrote:
> np miescowosci od A do F potem od G do L ....
> i tu powstal problem, jak wykonac select by baza zwracala takie wyniki

 select .. from tabelka where miejscowosc >'g';
 select .. from tabelka where miejscowosc <'g';

-- 
wojciech.jukowski
Re: select zaczynajace sie na litery
#1449
Author: Andrzej Kaczmarek
Date: Tue, 28 Aug 2001 15:31
19 lines
1412 bytes
slawek- napisał(a):

> SELECT
>     nazwa
> FROM
>     miejscowosci
> WHERE
>     (LOWER(nazwa) REGEXP '^[abcćdef].*')

(LOWER(LEFT(nazwa, 1)) BETWEEN 'a' AND 'f')

Na oko powinno być minimalnie szybsze, ponieważ nie ma regexpa, LOWER jest
tylko dla jednego znaku, a BETWEEN to zwykłe (szybkie) porównanie.

> ORDER BY nazwa

-- 
pozdrawiam,
Andrzej
Re: select zaczynajace sie na litery
#1450
Author: slawek-
Date: Tue, 28 Aug 2001 16:46
12 lines
1366 bytes
"Andrzej Kaczmarek" <ak@wroc.vulcan.pl> napisał:
> >     (LOWER(nazwa) REGEXP '^[abcćdef].*')
>
> (LOWER(LEFT(nazwa, 1)) BETWEEN 'a' AND 'f')
>
> Na oko powinno być minimalnie szybsze, ponieważ nie ma regexpa, LOWER jest
> tylko dla jednego znaku, a BETWEEN to zwykłe (szybkie) porównanie.

Tylko, że to chyba nie wybierze polskich znaków (nie mogę
sprawdzić teraz).

slawek-
Re: select zaczynajace sie na litery
#1451
Author: Andrzej Kaczmarek
Date: Tue, 28 Aug 2001 17:23
23 lines
1851 bytes
slawek- napisał(a):

>> >     (LOWER(nazwa) REGEXP '^[abcćdef].*')
                                 ^^^^^^^
>>
>> (LOWER(LEFT(nazwa, 1)) BETWEEN 'a' AND 'f')
>>
>> Na oko powinno być minimalnie szybsze, ponieważ nie ma regexpa, LOWER jest
>> tylko dla jednego znaku, a BETWEEN to zwykłe (szybkie) porównanie.
> 
> Tylko, że to chyba nie wybierze polskich znaków (nie mogę
> sprawdzić teraz).

No nie wybierze, bo szuka po ASCII, ale mozna by to tak jeszcze zrobić:
(LOWER(LEFT(nazwa, 1)) IN ('a', 'b' [...], 'Ą', 'Ć', 'Ę', 'ą', 'ć', 'ę')

jak twierdzi manual IN jest bardzo szybkie wieć chyba byłoby oki.

ps. Twoje też nie wybierze ;)

-- 
pozdrawiam,
Andrzej
Re: select zaczynajace sie na litery
#1452
Author: slawek-
Date: Tue, 28 Aug 2001 18:22
9 lines
1300 bytes
"Andrzej Kaczmarek" <ak@wroc.vulcan.pl> napisał:
>> >     (LOWER(nazwa) REGEXP '^[abcćdef].*')
> ps. Twoje też nie wybierze ;)

Hmm... przecież wymieniam wszystkie potrzebne literki. Poza tym to co
podałem działa w jednym z projektów :-)


slawek-
Re: select zaczynajace sie na litery
#1453
Author: Andrzej Kaczmarek
Date: Tue, 28 Aug 2001 19:33
14 lines
1582 bytes
slawek- napisał(a):

>>> >     (LOWER(nazwa) REGEXP '^[abcćdef].*')
>> ps. Twoje też nie wybierze ;)
> 
> Hmm... przecież wymieniam wszystkie potrzebne literki. Poza tym to co
> podałem działa w jednym z projektów :-)

Mamy jeszcze wśród literek od 'a' do 'f' takie krzaczki jak 'ą' i 'ę', a
poza tym LOWER nie zamienia np. 'Ą' na 'ą' :)

-- 
pozdrawiam,
Andrzej
Re: select zaczynajace sie na litery
#1454
Author: slawek-
Date: Tue, 28 Aug 2001 21:45
11 lines
1501 bytes
"Andrzej Kaczmarek" <ak@wroc.vulcan.pl> napisał:
> Mamy jeszcze wśród literek od 'a' do 'f' takie krzaczki jak 'ą' i 'ę',

A tutaj niedopowiedzenie. Nie ma miast zaczynających się na ą i ę zatem
wykluczyłem te literki ze względu na wydajność.

> a poza tym LOWER nie zamienia np. 'Ą' na 'ą' :)

U mnie zamienia. Przekompilowałem sobie mysqla z obsługą latin2.

slawek-
Re: select zaczynajace sie na litery
#1455
Author: Andrzej Kaczmarek
Date: Tue, 28 Aug 2001 22:30
18 lines
1838 bytes
slawek- napisał(a):

>> Mamy jeszcze wśród literek od 'a' do 'f' takie krzaczki jak 'ą' i 'ę',
> 
> A tutaj niedopowiedzenie. Nie ma miast zaczynających się na ą i ę zatem
> wykluczyłem te literki ze względu na wydajność.

A faktycznie, chodziło o nazwy miejscowości, nie zauważyłem - zwracam honor.

>> a poza tym LOWER nie zamienia np. 'Ą' na 'ą' :)
> 
> U mnie zamienia. Przekompilowałem sobie mysqla z obsługą latin2.

A ja się na Win32 nie będę w takie klocki bawił (a przydałoby się)

-- 
pozdrawiam,
Andrzej
Re: select zaczynajace sie na litery
#1445
Author: Michal Sznajder
Date: Wed, 29 Aug 2001 07:34
27 lines
1860 bytes
Witam 

Napisane przez sznajder@fxmedia.com.pl (Michal Sznajder)  w
pl.comp.lang.php 
> Napisane przez "Piotr Burda" <poczta@narty.pl>  w pl.comp.lang.php
>>> SELECT
>>>     nazwa
>>> FROM
>>>     miejscowosci
>>> WHERE
>>>     (LOWER(nazwa) REGEXP '^[abcćdef].*')
>>> ORDER BY nazwa
> select ....
> where lower(nazwa) like 'a%' or lower(nazwa) like 'b%' ... itd

Oczywiscie bzdure walnolem 8-). Powinno byc cos takiego:
select ....
where nazwa >= 'A' and nazwa >= 'G'

Musisz tez pokombinowac z lower jesli masz wyrazy o roznych wielkosciach 
liter. Jesli masz obsluge odpowiednich collatow to powinno dzialac tez z 
polskimi literami.

-- 
Pozdrawiam 
	Michal "Misza" Sznajder
[  http://www.fxmedia.com.pl/ ]
Re: select zaczynajace sie na litery
#1446
Author: 7th Wojciech Jukowski
Date: Wed, 29 Aug 2001 08:39
19 lines
1585 bytes
witam,

Michal Sznajder wrote:
> where nazwa >= 'A' and nazwa >= 'G'
> 
> Musisz tez pokombinowac z lower jesli masz wyrazy o roznych wielkosciach
> liter.

prawde powiedziawszy czuje sie dziwnie. czytam wlasnie rozne dywagacje
na temat stosowania lower, likeow in.. czy ktos moze mi powiedziec czemu
nikt nie wspomnial o zwyklym przyrownaniu (badz co jest w nim
nieoptymalnego):

.. nazwa >'a' and nazwa<'h'    - od a oraz A do g i G
.. nazwa >'h' and nazwa<'p'    - od h oraz H do o i o oraz Ó
.. nazwa >'p'                  - reszta

-- 
wojciech.jukowski
Re: select zaczynajace sie na litery
#1447
Author: Michal Sznajder
Date: Wed, 29 Aug 2001 10:24
27 lines
2320 bytes
Witam 

Napisane przez 7th Wojciech Jukowski <wojciech@jukowski.com>  w 
pl.comp.lang.php
> Michal Sznajder wrote:
>> where nazwa >= 'A' and nazwa >= 'G'
>> Musisz tez pokombinowac z lower jesli masz wyrazy o roznych wielkosciach
>> liter. 
> prawde powiedziawszy czuje sie dziwnie. czytam wlasnie rozne dywagacje
> na temat stosowania lower, likeow in.. czy ktos moze mi powiedziec czemu
> nikt nie wspomnial o zwyklym przyrownaniu (badz co jest w nim
> nieoptymalnego):
> .. nazwa >'a' and nazwa<'h'    - od a oraz A do g i G

Bo to zalezy od bazy. Np. IB sa tak zwane collat'y (sposoby sortowan 
znakow). Normalnie kolejnosc literek idzie tak a...zA...Z<polskie>. Mozna 
sobie wlaczyc kolejnosc z uwzglednieniem polskich liter albo np. taka  
aA.....zZ (tez z uwzglednieniem polskich liter ale to chyba w FB). 

Nie wiem jak jest w MySQL'u. Jesli tam nie ma mechanizmu collatow to trzeba 
kombinowac z lower (ew. upper) albo pisac tak
... where (nazwa > 'a' and nazwa < 'h') or (nazwa > 'A' and nazwa < 'H')

-- 
Pozdrawiam 
	Michal "Misza" Sznajder
[  http://www.fxmedia.com.pl/ ]
Re: select zaczynajace sie na litery
#1448
Author: 7th Wojciech Jukowski
Date: Wed, 29 Aug 2001 12:47
12 lines
1410 bytes
witam,

Michal Sznajder wrote:
> Bo to zalezy od bazy. Np. IB sa tak zwane collat'y (sposoby sortowan
> znakow)

zgadza sie jednak pozwole sobie przytoczyc zdanie z pierwszego listu w
tym watku " by baza zwracala takie wyniki PHP i MySQl". ja sprawdzilem
na pg i mysql. najwyrazniej dziala.

-- 
wojciech.jukowski
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads