Avatar billede Slettet bruger
29. august 2006 - 12:30 Der er 11 kommentarer og
1 løsning

Hente første 25 ud, og derefter de næste 25, SQL

Jeg er ved at lave et besked system, hvor man skal kunne bladre sine beskeder igennem med sidetal.. derfor skal jeg først hente de første 25 ud, og når man vælger side 2 fx, skal den hente de næste 25 ud.

Tabellen er opbygget så alle beskeder til alle brugere står i samme tabel, så den skal kun gøre det ud fra "til" kollonen, som angiver hvilket id beskederne er til. Som jeg har det nu, henter den alle beskederne ud for den bestemte bruger:

"SELECT id, fra, subject, date, stat FROM message WHERE til = '" + ThisID +"'"
Avatar billede mikkel_sommer Nybegynder
29. august 2006 - 12:39 #1
Du kan lave det i en metode som tager id og side nr som parametre og så udfra side nr'et afgøre hvilke rows i dit dataset som skal vises.
Avatar billede softspot Forsker
29. august 2006 - 12:44 #2
Du kan også hente alle id'er i tabellen og gemme dem mens brugeren paginerer igennem resultatet (f.eks. i et array af int eller long). Dette array kan du så bruge til at hente de rækker som skal vises (du kan generere en kommasepareret streng som du kan bruge i samspil med IN-operatoren i SQL). Metoden har naturligvis den svaghed, at nye rækker ikke kommer med sålænge dit "indeks" ikke bliver opdateret.
Avatar billede Slettet bruger
29. august 2006 - 12:47 #3
Det vil ikke virke efter hensigten, grunden til jeg vil lave det sådan her er netop for at jeg ikke skal hente ALLE beskederne ud, det vil belaste databasen for meget hvis 200 mennesker skal logge på hele tiden
Avatar billede thesurfer Nybegynder
29. august 2006 - 13:31 #4
wb-freekill> Det du søger, hedder "paging". Søg på det, enten her på eksperten.dk eller via søgemaskine..

Eksempel på søgeord: c# sql paging

erstat evt sql med mysql eller mssql, hvis det er det du bruger.

- Ingen points tak.
Avatar billede softspot Forsker
29. august 2006 - 13:40 #5
Hvormange resultater er der i dit udtræk?

Hvis det kun er id'erne du skal holde i array'et, og selvom det er 1000 id'er du skal gemme, fylder det jo ikke meget mere end 4 Kb.

I øvrigt kan du vel bare smide indekset i cachen, således at flere brugere der laver den samme forspørgsel, kan bruge det samme indeks. Du kan evt. lave en forældelses-strategi for dine indeks, så det ikke lever mere end f.eks. 2 minutter eller hvad der nu er passende for dine data (alt efter hvor ofte de bliver opdateret).
Avatar billede Slettet bruger
29. august 2006 - 13:53 #6
Der kan være alt fra 0 til uendeligt mange.. flere tusind om nødvendigt
Avatar billede thesurfer Nybegynder
29. august 2006 - 14:02 #7
wb-freekill> Paging er nok det nemmeste.. kig på det..
Avatar billede coderdk Praktikant
29. august 2006 - 14:09 #8
Er det til ASP.NET eller en Windows app? Windows app, så brug cursors... Hvilken database backend? Hvis det er MySQL kan du bruge LIMIT i din SELECT ;)
Avatar billede softspot Forsker
29. august 2006 - 14:11 #9
thesurfer >> den metode jeg skitserer er også en pagineringsmetode :)

Et andet alternativ er at gemme det første og sidste id i dit udtræk og så benytte det til at lave dit næste udtræk (top 25 efter det sidste id, hvis det er fremad og tilsvarende i den modsatte retning, hvis det er bagud - indrømmet: navigationen bagud er lidt mere kompliceret end fremad :)).
Avatar billede Slettet bruger
29. august 2006 - 14:11 #10
Vil kigge på paging, det er en MySQL DB Windows App
Avatar billede thesurfer Nybegynder
29. august 2006 - 14:32 #11
Jeg hopper lige ud af spørgsmål.. ingen grund til at jeg får mails, når jeg ikke rigtigt deltager i spørgsmålet.. :-)

- Ingen points til mig, tak.
Avatar billede lillemanden Nybegynder
10. september 2006 - 15:05 #12
Er det mig der har misforstået noget eller leder du bare efter "LIMIT"?
Som i:

"SELECT id, fra, subject, date, stat FROM message WHERE til = '" + ThisID +"' LIMIT " + CurrentRow + ",25"

Hvor CurrentRower nummeret (starter ved 0) på den første row på siden. Så kan du bare ændre CurrentRow med +/-25 alt efter om du køre op eller ned.
Du kan finde ud af hvor mange beskeder der er ved at bruge:

"SELECT COUNT(*) FROM message WHERE til = '" + ThisID +"'"

Det returnere en række med en kolonne med navnet "COUNT(*)", som er antallet af beskeder.
Håber ikke jeg helt misforstod hvad du ville.
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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