Toon posts:

[asp/sql]Volgende 10

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beetje rare titel, kon niets beters bedenken :)

Ik ben al een tijdje bezig met een (ASP)site, maar deze begint aardig te groeien.
Nu heb ik een overzicht van nieuwsitems. De hoofdpagina laat de eerste 8 zien en dan kun je ook nog alle nieuwsitems bekijken.

Dit is echter absoluut niet te handhaven als de database nog verder gaat groeien.
De oplossing hiervoor is de data te categoriseren en door per bijvoorbeeld 10 nieuwsitems door de database te wandelen. Mijn vraag is echter hoe ik dit doe.

De tabel bestaat in dit geval uit een incremental ID, maar doordat er ook berichten kunnen worden verwijderd, ontbreekt hier een aantal ID's, waardoor ik niet gewoon kan zeggen:

code:
1
select * from tabel where id between 1 and 10


Hierdoor zou hij niet in alle gevallen 10 resultaten geven.

Ik zou eigenlijk op aanwezige rij moeten sorteren, maar ik heb geen idee hoe dit te doen. Uiteraard aan de Count gedacht, maar dan zou je nog steeds een query moeten hebben die de volgende 10 kan weergeven.

Of moet je het e.e.a. in een array stoppen of in een object?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 15:34

gorgi_19

Kruimeltjes zijn weer op :9

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • supakeen
  • Registratie: December 2000
  • Laatst online: 09-09-2025
SELECT * FROM tabel LIMIT 0,10
:?

Verwijderd

Topicstarter
A, heet zo iets database paging.
Ik was al op zoek naar zo'n term, maar kon weinig vinden.

Hier ga ik nu wel uitkomen...

Thx :)

  • Mart!
  • Registratie: Februari 2000
  • Laatst online: 14:10
De manier op asp101 is erg elegant, maar heeft naar mijn idee het grote nadeel dat je dus nog wel een query uitvoert die ALLE records teruggeeft. Wat ik meestal doe is op de eerste pagina n items tonen, maar in de query n + 1 items opvragen (bv. SELECT TOP 11 * FROM nieuws). Ik zorg dat als de volgende-knop wordt geklikt, dat dan de volgende n items vanaf id n + 1 word getoond. Zo worden slechts de records in de recordset geladen die van belang zijn.

  • Rhapsody
  • Registratie: Oktober 2002
  • Laatst online: 19:20

Rhapsody

In Metal We Trust

http://www.boosternetworks.be/scripting/asp/ daar staat een heel mooi scrippie ervoor

🇪🇺 pro Europa!


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 28-08 19:27

Crazy D

I think we should take a look.

Ook daarmee haal je alle records op (of keek ik ergens overheen?). Nu kun je dat wel een beetje faken door een top n query te doen, 4e pagina een top40 query dus, maar op pagina 210 wordt je dan alsnog niet blij ;)
Het laatste id meegeven in de "next" link is 1 optie, een andere mogelijkheid is eerst via een query uitvogelen met welk ID je "page" moet beginnen, en daarna een top 10, beginnend bij dat ID.

Exact expert nodig?


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Zoek eens naar termen als PageSize, PageCount, AbsolutePosition

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 28-08 19:27

Crazy D

I think we should take a look.

robjanssen schreef op 01 november 2002 @ 19:57:
Zoek eens naar termen als PageSize, PageCount, AbsolutePosition
Dat wordt in de gegeven links gebruikt. En als je daarmee werkt, haal je altijd of alles op, of t/m het laatste record wat je wilt zien (maar dus ook een hoop extra records die je niet nodig hebt).

Exact expert nodig?


  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 19-08 19:06
Ligt het nou aan mij of kun je hier gewoon met ORDER BY icm. LIMIT werken?

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 28-08 19:27

Crazy D

I think we should take a look.

Limhes schreef op 02 november 2002 @ 11:04:
Ligt het nou aan mij of kun je hier gewoon met ORDER BY icm. LIMIT werken?
Als er met MySql gewerkt zou worden had dat gekunt... :)

Exact expert nodig?


Verwijderd

Deze moet je dus hebben, bouw daar je pagina maar omheen...zo heb ik dat ook gedaan @ mijn forum.

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 28-08 19:27

Crazy D

I think we should take a look.

Die link is al gegeven en die doet dus precies wat ik zeg: alles ophalen, en daarna met de pages van de recordset er doorheen lopen. Leuk als je 100000 records hebt :)

Exact expert nodig?


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Die Crazy_D zit maar alle oplossingen af te kraken in plaats van dat hij zelf eens met een goede oplossing komt.

Verwijderd

Mart! schreef op 31 oktober 2002 @ 18:32:
De manier op asp101 is erg elegant, maar heeft naar mijn idee het grote nadeel dat je dus nog wel een query uitvoert die ALLE records teruggeeft. Wat ik meestal doe is op de eerste pagina n items tonen, maar in de query n + 1 items opvragen (bv. SELECT TOP 11 * FROM nieuws). Ik zorg dat als de volgende-knop wordt geklikt, dat dan de volgende n items vanaf id n + 1 word getoond. Zo worden slechts de records in de recordset geladen die van belang zijn.
Daar zou ik twee dingen aan toe willen voegen:
- als je in je query een WHERE id > {laatste id vorige pagina}
gebruikt dan hoef je maar n items op te halen.
- om te voorkomen dat je aan je id vastzit als sorteervolgorde (probeer bovenstaande maar eens te doen als je id's niet in de goede volgorde staan) zou ik een 'orderby'-kolom maken met daarin een uniek getal wat de volgorde aangeeft. De volgorde in die kolom kan je dan bijv gelijktrekken met de datumkolom.

  • maikel
  • Registratie: Januari 2001
  • Laatst online: 28-08 13:52
SELECT TOP 10 * FROM tabel WHERE ID IN (SELECT TOP 40 ID FROM tabel ORDER BY ID DESC) ORDER BY ID

Nadeel van dit statement is dat ie er ALTIJD 10 laat zien (mits er meer dan 10 records zijn natuurlijk), dus ook al je op de laatste pagina nog maar 5 berichten over hebt.

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 28-08 19:27

Crazy D

I think we should take a look.

robjanssen schreef op 03 november 2002 @ 10:17:
Die Crazy_D zit maar alle oplossingen af te kraken in plaats van dat hij zelf eens met een goede oplossing komt.
Ik had al 2 mogelijkheden gegeven, maar als je de hele draad had gelezen had je dat al gezien. En Mart had al gezegt wat het nadeel is, en ik daarna nog een keer. Maar goed als jij eerst je 240.000 records wilt ophalen om daarna te pagen, fine by me. Ik kan je uit ervaring vertellen dat je daar niet blij van wordt (en dat waren nog geen 1000 records, maar die server stond dan ook meer te doen dan alleen mijn geklungel te hosten). Nadat ik het had aangepast door eerst het ID te bepalen waar die betreffende pagina mee begint, en daarna een top-n query te doen, was het opeens weer leuk om de pagina op te vragen :)

Exact expert nodig?

Pagina: 1