Avatar billede pixelpaw Nybegynder
23. september 2003 - 14:38 Der er 26 kommentarer og
1 løsning

valg i select

Jeg har lavet mit eget forum, men det skal optimeres lidt. Ved sidenindeling af threads har jeg brug for en metode til at hente et specifikt antal records. Hvis jeg nu har 200+ records sorteret efter dato, og jeg så skal bruge records 40-60, hvordan gør jeg så det?

Min nuværende streng ser sådan her ud:
sqlRSThreads = objDB.execute("SELECT * FROM c_posts WHERE postForumID=" + intForumID + " AND postThreadID=0 ORDER BY postSticky,postLastPost DESC");

Jeg koder i ASP JScript.
Avatar billede terry Ekspert
23. september 2003 - 15:00 #1
SELECT TOP 200 * FROM .....
Avatar billede terry Ekspert
23. september 2003 - 15:01 #2
It is also better to select only the fields you need. * means ALL fields even if you dont need to use them !
Avatar billede pixelpaw Nybegynder
23. september 2003 - 15:13 #3
I know about the *, but I really need all the info.
About your answer, I don't need the 200, I need to pick out a range of records in the middle of those records, fx records 40-60 ordered by the criterias.
Avatar billede terry Ekspert
23. september 2003 - 15:21 #4
Well you will need to include something in your WHERE part of the SQL otherwsie how does SQL know what to return? For example

WHERE SomeDate > .....
Avatar billede terry Ekspert
23. september 2003 - 15:23 #5
the criteria is all you have to limit what the SQL returns.
Avatar billede terry Ekspert
23. september 2003 - 15:29 #6
when you have returned your recordset then you could also loop through them until you get to those you are intereted in!
Avatar billede pixelpaw Nybegynder
23. september 2003 - 15:33 #7
I'm using the loop at the moment, but there has to be a better of doing it. I can't be more specific in the WHERE part because they all meet the criteria.
Avatar billede satanic_raven Nybegynder
23. september 2003 - 15:40 #8
Er ikke helt så meget inde i det der ASP længere, men jeg mener at du blot skal indsætte et "40 <" og "<60" før og efter dit "intForumID"...

Så burde den kun vælge mellem 40 og 60...

Men er ikke helt sikker...

S.R.
Avatar billede terry Ekspert
23. september 2003 - 15:47 #9
pixelpaw>If I knew of a way I would tell you but I cant see HOW you can limit it other than using TOP X!

Lets say you have an SQL which can return 200 records but you only want some of these and they are NOT the just the first 20 or the last 20. HOW do you tell the SQL compiler which ones you want IF it is NOT included in the criteria(WHERE)
There is NO function in Access which allows you select the MIDDLE records!
Avatar billede pixelpaw Nybegynder
23. september 2003 - 15:50 #10
satanic raven, det vælger bare det id der ligger mellem 40 og 60, men det har ikke noget med id'et gøre :)

terry, damn, guess I have to keep my loop then :(
Avatar billede terry Ekspert
23. september 2003 - 15:59 #11
Yes, unless you can include some other criteria to tell Access which ones you want.
Make sure all the fields you include in the WHERE are indexed and it should help performance!
Avatar billede hekla Nybegynder
23. september 2003 - 23:15 #12
Du kan bruge følgende på din asp-side:

<% Dim RS

    if request.QueryString("n") = "" then
        n = 50
    else
        n = request.QueryString("n")
    end if

set RS = server.createobject ("ADODB.recordset")

RS.open "MinTabel", strConnect, adOpenkeyset, adLockReadOnly, adCmdTable

    x = 0
    RS.movelast
    if n = 50 then
    else
        do until x = n-50
            RS.moveprevious
            x = x +1
        loop
    end if

    m = 0
   
    do until m = 50 or RS.BOF
%>

      <tr>
        <td><%=RS("id")%>....
    </td>
      </tr>

    <%
    RS.moveprevious
    m = m + 1
   
   
    loop

RS.close
set RS = nothing
%>


Du bladrer med:
minside.asp?n=<%=n-50%> og minside.asp?n=<%=n+50%>
Avatar billede pixelpaw Nybegynder
23. september 2003 - 23:54 #13
Efter hvad jeg lige kan se, så er det ca det samme jeg bruger nu med et loop.
Avatar billede hekla Nybegynder
24. september 2003 - 17:20 #14
Det kan du også sagtens bruge. Du skal bare spørge med de rigtige URLs (minside.asp?n=<%=n-50%> og minside.asp?n=<%=n+50%>), når du skal hente posterne
Avatar billede pixelpaw Nybegynder
24. september 2003 - 17:58 #15
Men det var ikke meningen med mit spørgsmål. Problemet er, at siden i det tilfælde stadig henter samtlige records (der opfylder WHERE), hvad sløver sitet en smule. Så det er bare en spørgsmål om optimering.
Avatar billede terry Ekspert
24. september 2003 - 18:19 #16
If you can NOT reduce the number of records using the WHERE then make sure your fields in the where are INDEXED! that about all you can do :o)
Avatar billede hekla Nybegynder
24. september 2003 - 18:25 #17
På en aspserver henter du ikke alle records først og sorterer bagefter. Sorteringen foregår på serveren, og uanset, hvordan du gør det, skal du kigge alle records igennem, for at se, hvilke, der skal hentes! Jeg kan ikke forestille mig, at Jet'en kan gøre det væsentligt hurtigere end aspserveren.
Avatar billede hekla Nybegynder
15. februar 2004 - 16:17 #18
Fandt du ud af det?
Avatar billede terry Ekspert
15. februar 2004 - 16:48 #19
this is going back some time, and there are hundreds more like it :o)
Avatar billede hekla Nybegynder
15. februar 2004 - 16:54 #20
Det ved jeg godt terry, men jeg har tid og lyst til at lege ekspert lige nu. Og så gør det jo ikke noget, hvis det samtidig giver lidt point.
Avatar billede terry Ekspert
15. februar 2004 - 17:05 #21
No critic intended towards you hekla, only which others would do those same. But actually I would prefer that admin/co-admins used more time to follow up on those who dont close. That way we wouldnt get labeled as "point grisk" just because we want the points we think we have earned :o)
Avatar billede terry Ekspert
15. februar 2004 - 17:06 #22
And those who dont respond should have their account closed!
Avatar billede hekla Nybegynder
15. februar 2004 - 18:22 #23
Helt enig, for selv om man synes, det er sjovt at lege/være ekspert, lægger man en masse tid og energi i det, og burde kunne forvente credit for det.
Avatar billede pixelpaw Nybegynder
15. februar 2004 - 20:16 #24
jeg fandt ud af, at det ikke kan lade sig gøre... øv
så jeg fortsætter på den gamle måde
Avatar billede satanic_raven Nybegynder
15. februar 2004 - 20:34 #25
Hmmm... Meget selvisk hvis du spørger mig...

Nogle kloge hoveder herinde har forsøgt at hjælpe dig med dit problem, og når du så erkender at det ikke kan løses på den fancy måde som du gerne vil have, tager du bare alle pointene selv. På Eksperten.dk gives der point efter indsats, ikke efter korrekte svar; det er nu min erfarring...

Specielt har terry forsøgt at fortælle dig, at der ikke findes nogen løsning på dit problem som lever op til dine ønsker.

Og hvis du endelig VIL ha' en egentlig løsning udviklet af proffessionelle, kan du jo prøve at kigge koderne igennem hos fx. AltaVista eller et stort firma med forum som fx. Blizzard...

Begge steder bør du være i stand til at finde det du mangler, og hvis ikke, kan du jo altid spørge dem om hvad de har gjort... Jeg er sikker på at de gerne vil hjælpe dig, hvis du altså spørger pænt, og husker at sige "tak for hjælpen" selvom du ikke fik løsningen... Dette har du forresten gjort her, hvilket sender et signal om at du er ligeglad med den tid som folk investerer på at hjælpe dig...

S.R.
Avatar billede pixelpaw Nybegynder
15. februar 2004 - 20:51 #26
Der var ikke nogen her der kunne fortælle mig noget, jeg ikke allerede vidste i forvejen. Først lod jeg spørgsmålet stå åbent for at se, om der var andre der kunne hjælpe mig. Derefter glemte jeg alt om spørgsmålet. I dag får jeg så nogle påmindelser ang. spørgsmålet. Jeg sidder og er rimlig stresset, åbner siden, skimter indlægende, ser noget om for mange åbne spørgsmål på eks.dk, svarer og lukker.
Ked af hvis jeg har trådt nogle over føderne ved dette, det var bestemt ikke meningen. Pointene er jeg pisse ligeglad med, dem måtte i skam godt få, det gik bare lidt stærkt.
Jeg laver et nyt indlæg hvor i kan svare.
Og tak for hjælpen! :o)
Avatar billede pixelpaw Nybegynder
15. februar 2004 - 20:53 #27
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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