WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   LIMIT-variant i Access (MDB) (https://www.wn.se/forum/showthread.php?t=34418)

qson 2009-01-13 10:48

Hej !
Skriver en app som hämtar info från en MDB-databas (med PHP:s COM ODBC)
Funkar bra så här långt. Men nu tänkte jag få in någon form av "pagination" och behöver nåt liknande MYSQLs LIMIT. Hittade TOP 25 men vet inte om den gör samma sak...

HOWTO ?

digi 2009-01-13 10:58

SELECT TOP 25 * FROM tbl

Om jag inte minns helt fel =)

Alex 2009-01-13 11:09

Citat:

Originally posted by digitalUnit@Jan 13 2009, 10:58
SELECT TOP 25 * FROM tbl
Om jag inte minns helt fel =)

Det gör du inte. Det stämmer precis.

qson 2009-01-13 12:21

Jo, men sen då. Då har jag ju hämtat "Sida 1" (1..25). Om jag sen vill hämta sida 2 (26..50) hur gör jag då?

I MYSQL finns det ju LIMIT 26, 25 men inte i MSSQL (MDB)

digi 2009-01-13 12:57

Citat:

Originally posted by qson@Jan 13 2009, 13:21
Jo, men sen då. Då har jag ju hämtat Sida 1 (1..25). Om jag sen vill hämta sida 2 (26..50) hur gör jag då?
I MYSQL finns det ju LIMIT 26, 25 men inte i MSSQL (MDB)

Har för mig att det inte är lika enkelt att fixa paging i Access som i MySQL men det här kan vara en lösning, även om det känns lite "fulhack" :)

Simple Data Paging

P.S. MSSQL och MDB (MS Access) är inte samma sak ;)

qson 2009-01-13 13:44

Citat:

Originally posted by digitalUnit@Jan 13 2009, 13:57

P.S. MSSQL och MDB (MS Access) är inte samma sak

Ursäkta mig. Läser data ur en MDB-databas med SQL-uttryck.
Skall titta närmare på Simple Data Paging. Verkar intressant. Har tillfälligt gjort en caching-funktion för att råda bot på en del flaskhalsar...
Tack så länge!

qson 2009-01-13 15:57

Tack digitalUnit !
Det funkar utmärkt. Använde inte PROCEDURES men blev inspirerad av den SQL som stod överst på sidan

När jag vill ha rad 200..300:
Hämta Rad 0..300, vänd på det, och hämta de 100 första raderna vilka du sedan vänder igen:

Kod:

SELECT * FROM (
 * *SELECT TOP 100 * FROM (
 * * * *SELECT TOP 300 * FROM tabell WHERE någonting='något' ORDER BY fält1 ASC, fält2 ASC, fält3 ASC
 * * * *) AS SUBSEL ORDER BY SUBSEL.fält1 DESC, SUBSEL.fält2 DESC, SUBSEL.fält3 DESC
 * * ) AS PAGESEL ORDER BY PAGESEL.fält1 ASC, PAGESEL.fält2 ASC, PAGESEL.fält3 ASC

Funkar utmärkt. Testat med 250 rader med 5 rader per sida. Även testat med 15 per sida. Funkar med alla rader i rätt ordning... !
Fantastiskt...

EDIT: Detta, tillsammans med min cachningsfunktion har gjort det hela märkbart snabbare... :-)


Alla tider är GMT +2. Klockan är nu 00:13.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson