Jeg har en søgefunktion som returnerer 25 poster ad gangen samt et count på det samlede antal søgeresultater som matcher søgningen. Jeg har så et filter som via ajax fjerner de "tøjmærker" i resultatlisten som brugeren fravælger via en række checkboxes. Problemet er så at jeg kun vil vise de tøjmærker i checkboxlisten som er fundet i søgningen - men jeg får jo kun returneret de 25 poster som matcher og der er højst sandsynligt mærker i det samlede antal søgeresultater som ikke er repræsenteret blandt de 25 poster. Mit spørgsmål er så - hvordan får jeg det samlede antal tøjmærker som matcher søgeresultaterne med i sql forespørgselen uden at skulle returnere alle søgeresultaterne ved hver søgning (lidt tungt når jeg jo kun skal vise de 25 ad gangen). Skal jeg foretage flere sql kald ved hver søgning eller?
til buzzzz - jeg vil jo give brugeren mulighed for at få vist alle tøjmærker eller fravælge nogle af dem - derfor er jeg ved første kald nødt til at vide hvor mange tøjmærker det samlede søgeresultat vil indeholde - og ikke kun på de første 25 poster
Nu ved jeg ikke lige hvordan du har skruet dit ajax kald sammen, men hvis vi nu siger du bruger JSON til response, så vil du have et container object hvor den ene property fortæller total count og en anden til en collection af de 25 mærker.
Dvs. 2 kald imod DB'en, et som henter count og et andet som henter mærkerne. Typisk vil de 2 kald ske på serveren, sådan at ajax requesten kalder en service som udfører de nødvendige sql-kald.
Når du ændrer på søgekriterierne er du også nød til at forespørge igen for at have det korrekte grundlag for din paginering. Det må være svaret i sin basisform.
Hvis du så vil optimere på dette, kan du benytte en cache til dine data, som du søger i. En yderligere optimering (af hukommelsesforbruget) kunne så være, at implementere et indeks i hukommelsen, som kun indeholder de oplysninger der bruges til at filtrere data med, f.eks. id og tøjmærke (som formegentlig kun er en delmængde af de data dit udtrøk består af). Så kunne du foretage et opslag i dette indeks for at se hvormange og hvilke rækker der skal udtrækkes til det ønskede kriterium. Begge varianter kræver at du cacher alle rækker. Med alle data cached, kan du nøjes med at slå op i databasen én gang og med den sidste, skal der foretages et opslag i databasen hver gang en side hentes, men altså kun for de rækker der skal vises på den aktuelle side i dit resultat...
Du kan yderligere rykke indekset ud på klienten, så du kan ændre pagineringen på klienten. Du kan desuden kombinere det med et predictive fetch-mønster der først henter de data der skal vises lige her og nu og så i baggrunden henter det næste sæt data (f.eks. den næste side, hvis det er det der er mest sandsynligt at brugeren vil se) og cacher disse rækker på klienten så de er klar til visning når de bliver nødvendige at vise.
Der findes forskellige måder at optimere systmer på, men det er som regel et spørgsmål om cost/benefit, hvilken løsning man har råd til at implementere... :-)
Synes godt om
Ny brugerNybegynder
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.