[ASP] Recordset sorteren per page

Pagina: 1
Acties:

  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Topicstarter
Ik ben tegen een vreemde probleem aangelopen waar ik niet zo een twee weet hoe het op te lossen is.

Ben momenteel een webinterface aan het bouwen voor een MSSQL database server. Met een query worden alle records opgehaald en in een recordset gestopt, waarna de gebruiker per page (zelf in te stellen of ze 10, 20, 100, etc. records per html pagina willen zien) kan browsen. Ze kunnen ook op elk kolom sorteren mbv:
code:
1
RecordSet.Sort


Het probleem is dat niet alleen het op het scherm gezette page wordt gesorteerd, maar de hele recordset. Dus als ik de eerste 10 records laat zien, en sort dan Descending, dan krijg ik niet de eerste 10 records te zien van hoog naar laag, maar de laatste 10, hoogste records.

Is er een makkelijke weg om sorteren per page mogelijk te maken mbv RecordSet?


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

Dat kan ja. Dan moet je je query zo aanpassen dat ie alleen selecteert wat je daadwerkelijk weer wil geven:
ASP.NET Visual Basic:
1
2
3
4
5
6
7
8
    query = "SELECT TOP 10 * " &_
            "FROM tabel " &_
            "WHERE id IN (" &_
              "SELECT TOP " & AantalRecordsInTabel - ((PaginaNummer - 1) * 10) & " id " &_
              "FROM tabel " &_
              "ORDER BY sorteerveld DESC " &_
            ") " &_
            "ORDER BY sorteerveld ASC"

Zo selecteer je eerst middels die subquery het achterste deel van je tabel, inclusief de 10 (in dit voorbeeld dan) die je echt wil weergeven, en daar selecteer je dan weer de eerste 10 van. Zo krijg je precies 10 records terug, die je kan sorten hoe je wil (wat hier dus al in de query gedaan is). :)

AantalRecordsInTabel is trouwens gewoon opgehaald met een query SELECT COUNT(*) FROM tabel. Paginanummer is de pagina die je zien wil.

Edit: bij de eerste 10 is het zelfs nog makkelijker:
ASP.NET Visual Basic:
1
    query = "SELECT TOP 10 * FROM tabel"

[ Voor 31% gewijzigd door NMe op 17-05-2004 14:15 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Topicstarter
NMe84 schreef op 17 mei 2004 @ 14:13:
Dat kan ja. Dan moet je je query zo aanpassen dat ie alleen selecteert wat je daadwerkelijk weer wil geven:
ASP.NET Visual Basic:
1
2
3
4
5
6
7
8
    query = "SELECT TOP 10 * " &_
            "FROM tabel " &_
            "WHERE id IN (" &_
              "SELECT TOP " & AantalRecordsInTabel - ((PaginaNummer - 1) * 10) & " id " &_
              "FROM tabel " &_
              "ORDER BY sorteerveld DESC " &_
            ") " &_
            "ORDER BY sorteerveld ASC"

Zo selecteer je eerst middels die subquery het achterste deel van je tabel, inclusief de 10 (in dit voorbeeld dan) die je echt wil weergeven, en daar selecteer je dan weer de eerste 10 van. Zo krijg je precies 10 records terug, die je kan sorten hoe je wil (wat hier dus al in de query gedaan is). :)

AantalRecordsInTabel is trouwens gewoon opgehaald met een query SELECT COUNT(*) FROM tabel. Paginanummer is de pagina die je zien wil.

Edit: bij de eerste 10 is het zelfs nog makkelijker:
ASP.NET Visual Basic:
1
    query = "SELECT TOP 10 * FROM tabel"
:/ . Wat een ziek stukje code :(. Subquery, etc. bah. In MYSQL was het tenminste veel makkelijker (SELECT * FROM tabel LIMIT 10,20 ORDER BY sorteerveld DESC). In ieder geval bedankt, ik zal kijken wat ik ermee kan doen :)


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

Darkvater schreef op 17 mei 2004 @ 15:06:
[...]

:/ . Wat een ziek stukje code :(. Subquery, etc. bah. In MYSQL was het tenminste veel makkelijker (SELECT * FROM tabel LIMIT 10,20 ORDER BY sorteerveld DESC). In ieder geval bedankt, ik zal kijken wat ik ermee kan doen :)
Helemaal mee eens dat het ziek is en makkelijker zou moeten kunnen. Helaas is LIMIT echter geen standaard SQL en werkt het geloof ik alleen in MySQL. Misschien dat iets als LIMIT in de volgende implementatie van de SQL standaard wordt inbegrepen. Ik hoop het in ieder geval wel.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.