Oracle 9.2i- strankovanie selectu
Honza Pazdziora
adelton na informatics.muni.cz
Pátek Červenec 11 17:04:17 CEST 2003
On Fri, Jul 11, 2003 at 04:34:52PM +0200, Kluvanek Martin wrote:
> Mam taky mozno blby dotaz ale zatial sme s tym neboli schopni pohnut.
> Potrebujem spravit SELECT ktoreho vysledok bude utriedeny podla nejakeho
> atributu ale odpoved potrebujem nastrankovat, cize vratit napriklad
> riadky 50..70.
> Nasi experimentatori tvrdia, ze to ide nastrankovat len podla povodneho
> neutriedeneho rownum a az potom utriedit, ale to mi triedi len obsah 1
> stranky a nie to co chcem ja (strankovat utriedenu tabulku).
>
> Takto je to blbo:
> $query = "select * from (
> select rownum limit, SEZNAM_SIGNALU.*, (
> select count(*) from MU_MODUL_VSTUPY where
> MU_MODUL_VSTUPY.SIGNAL=SEZNAM_SIGNALU.SIGNAL)
> as POCET_VSTUPU from SEZNAM_SIGNALU order by $OrderBy )
> where limit between $ListFrom and $ListTo";
1. Nejdrive si musite poskladat vystup, cili order by.
2. Pak si musite rownum z takto vraceneho subselectu nejak pojmenovat.
3. A pak muzete nad takto pojmenovanym sloupcem delat test a omezeni.
select * from vstupy ;
ID,NAME,VALUE
'1','jezek','20'
'2','krtek','20'
'3','krtek','30'
'4','sova','33'
'15','sova','3'
'16','zirafa','12'
[6 rows of 3 fields returned]
select * from (
select a.*, rownum limit from (
select * from vstupy order by value
) a
)
where limit between 2 and 3 ;
ID,NAME,VALUE,LIMIT
'16','zirafa','12','2'
'1','jezek','20','3'
[2 rows of 4 fields returned]
select * from (
select a.*, rownum limit from (
select * from vstupy order by value desc -- tady je desc
) a
)
where limit between 2 and 3 ;
ID,NAME,VALUE,LIMIT
'3','krtek','30','2'
'1','jezek','20','3'
[2 rows of 4 fields returned]
Uprava pro Vami pozadovanou datovou strukturu je ponechana jako domaci
cviceni. Pro sirsi obecenstvo: ano, order by v subselectech funguje
az od 8i.
Nicmene: nepouzivejte tohle pro data, kde ten nejvnitrnejsi select
vrati nejake velke mnozstvi dat a bude se delat porad dokola.
V takovem pripade je vyrazne lepsi si do pomozne tabulky spocitat
a ulozit poradi jednotlivych zaznamu a pak jet joinem podle teto
tabulky, pres indexy.
--
------------------------------------------------------------------------
Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
.project: Perl, mod_perl, DBI, Oracle, auth. WWW servers, XML/XSL, ...
Only self-confident people can be simple.
Další informace o konferenci Test