Avatar billede scandal Nybegynder
15. februar 2002 - 11:48 Der er 10 kommentarer og
1 løsning

vise 10 af 100 rækker af gange

Hej,

Et teoretisk spørgsmål:
Hvis jeg har en select, der returnerer 100 rækker med ORDER BY, kan jeg så definere at den skal behandle (og vise) 10 rækker af gangen ?

For at simplificere spørgsmålet lidt, kan man sige, at det skal fungere på samme måde som diverse internet-search engines. Når man søger, vises de første svar rimelig hurtigt, og først når man hopper videre finder den de næste.

(P.S jeg følger først op på denne tråd, tidligst Tisdag i uge 8)
Avatar billede jones_net Nybegynder
15. februar 2002 - 11:52 #1
du skal bruge LIMIT=10

/J
Avatar billede jones_net Nybegynder
15. februar 2002 - 11:58 #2
Her var det:
SELECT * FROM `dbname` LIMIT 0, 10

nullet er der udtrækket skal starte, og 10 er antallet af ting der skal vises.

Hvis du vil trække alle ting fra 40 til 50 hedder det altså
SELECT * FROM `visited` WHERE 1 LIMIT 40, 10

/J
Avatar billede jones_net Nybegynder
15. februar 2002 - 11:59 #3
Prøver lige igen, jeg fuckede lige op i den sidste sætning...

SELECT * FROM `visited` order by 'navn' LIMIT 40, 10

/J
Avatar billede teepee Nybegynder
15. februar 2002 - 12:16 #4
Hvad skal du vise dem i?

For at returnere 100 rækker hedder
WHERE rownum <= 100

At vise 10 ad gangen må da afhænge af hvad du skal vise dem i.
Avatar billede teepee Nybegynder
15. februar 2002 - 12:17 #5
=> jones_net    LIMIT, er det noget MySQL?
Avatar billede teepee Nybegynder
15. februar 2002 - 12:25 #6
=> scandal
Almindeligvis benytter man sig af en algoritme opdeler jhele sæøgesættet i vinduer, eks. af 10 styk. Når søgesættet indeholder 100 rækker har du altså 10 vinduer, og side 5 vil bestå af række 51-60 og så fremdeles.

Ved at sætte

WHERE rownum between (side*10)+1 and ((side+1)*10)

har du dit vindue. Oracle har cachet søgningen ved klik på side 2, 3.. osv. og vil være en anelse hurtigere, men jo længere du kommer ned i søgesættet jo flere rækker skal sorteres før der kan returneres.

Alternativt skal du gemme søgesættet i en midlertidig tabel og have opdelt siderne på forhånd. Herefter vil fremsøgning af de efterfølgende sider være lynhurtigt. Det er der rigtigt mange søgemaskiner der gør (og ikke gør)
Avatar billede teepee Nybegynder
15. februar 2002 - 12:26 #7
ups

WHERE rownum between (side*10)+1 and ((side+1)*10)

=>

WHERE rownum between ((side-1)*10)+1 and ((side)*10)
Avatar billede scandal Nybegynder
15. februar 2002 - 13:08 #8
Jones_net > Det er en ORACLE database, ikke MySql... Men ellers tak.

teepee > Tak for svaret. Jeg lader lige spørgsmålet stå for at se, om der kommer andre guldkorn. Angående den med ROWNUM<=100, den kan man ikke bruge direkte, når man også har en GROUP BY. Så skal man pakke det ind ført, men den har jeg styr på.
Avatar billede nosjns Nybegynder
15. februar 2002 - 13:35 #9
Du skal huske at lave order by (eller lign.) på din select-statement, da ROWNUM ikke er bundet unikt til en række.
Avatar billede teepee Nybegynder
15. februar 2002 - 14:22 #10
Åh ja, der er sandt
select * from (select...order by...) where rownum >= 100
Avatar billede scandal Nybegynder
18. april 2002 - 14:38 #11
har glemt hvad jeg skulle bruge det til  :-(
Men tak for svarene.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester