Jeg leter etter den beste måten å hente neste og forrige poster av en post uten å kjøre en full spørring. Jeg har en fullt implementert løsning på plass, og vil gjerne vite om det er noen bedre måter å gjøre dette der ute.
La oss si at vi bygger et nettsted for en fiktiv greengrocer. I tillegg til sine HTML-sider, hver uke, ønsker han å publisere en liste av tilbud på sitt nettsted. Han ønsker de tilbud om å oppholde seg i en faktisk database tabell, og brukerne må være i stand til å sortere tilbudene på tre måter.
Hvert element har også å ha en detalj side med mer, tekstlig informasjon om tilbudet og forrige og neste knappene. Den forrige og neste knappene må peke til nabo oppføringer avhengig av sortering brukeren hadde valgt for listen .
alt tekst http://www.pekkagaiser.com/stuff/Sort.gif?
Selvfølgelig, neste -knappen for tomater, klasse I må være Epler, klasse 1 i det første eksemplet, Pears, klasse I i den andre, og ingen i den tredje.
Oppgaven i detaljvinduet for å bestemme neste og forrige elementer uten å kjøre en spørring hver gang , med rekkefølgen på listen som den eneste tilgjengelige informasjonen (La oss si vi får det gjennom en GET parameter ?sort=offeroftheweek_price, og ignorere sikkerhets implikasjoner) .
Selvfølgelig, bare passerer ID-ene for neste og forrige elementer som parameter er den første løsningen som kommer til hjernen. Tross alt, vi vet allerede ID-er på dette punktet. Men, dette er ikke et alternativ her - det ville fungere i denne forenklede eksempel, men ikke i mange av mine virkelige verden bruksmåter.
Min nåværende tilnærming i min CMS bruker noe jeg har kalt sortering cache. Når en liste er lastet, jeg lagre elementet stillinger i poster i en tabell med navnet sortingcache.
name (VARCHAR) items (TEXT)
offeroftheweek_unsorted Lettuce; Tomatoes; Apples I; Apples II; Pears
offeroftheweek_price Tomatoes;Pears;Apples I; Apples II; Lettuce
offeroftheweek_class_asc Apples II;Lettuce;Apples;Pears;Tomatoes
selvsagt, det itemser kolonne virkelig befolket med numeriske IDer.
På detaljsiden, jeg tilgang nå den aktuelle sortingcacheposten, hente itemskolonne, eksploderer det, søke etter gjeldende element-ID, og returnere den forrige og neste nabo.
array(current => Tomatoes,
next => Pears,
previous => null
);
Dette er åpenbart dyrt, arbeider for et begrenset antall bare poster og skaper overflødige data, men la oss anta at i den virkelige verden, spørringen for å lage listene er svært dyrt (det er), kjører den i hver detalj utsikt er ute av spørsmålet, og noen caching er nødvendig.
Mine spørsmål:
Tror du dette er en god praksis for å finne ut nabo postene for varierende spørre bestillinger?
Vet du bedre praksis når det gjelder ytelse og enkelhet? Vet du noe som gjør dette helt foreldet?
I programmering teorien er det et navn på dette problemet?
Er navnet Sortering cache er hensiktsmessig og forståelig for denne teknikken?
Er det noen anerkjente, felles mønstre for å løse dette problemet? Hva heter de?
Merk: Mitt spørsmål er ikke om å bygge listen, eller hvordan du kan vise detaljvisningen. De er bare eksempler. Mitt spørsmål er grunnleggende funksjonalitet for å bestemme naboer av en rekord når en re-spørring er umulig, og den raskeste og billigste måten å komme dit.
Hvis noe er uklart, vennligst legg igjen en kommentar og jeg vil avklare.
Starte en dusør - kanskje det er litt mer info om dette der ute.














