Ik ben op zoek naar de beste manier om de volgende en vorige records van een record op te halen zonder het uitvoeren van een volledige query. Ik heb een volledig geïmplementeerde oplossing op zijn plaats, en zou graag willen weten of er betere manieren om dit er uit te doen.
Laten we zeggen dat we het bouwen van een website voor een fictieve groenteboer. Naast zijn HTML-pagina's, elke week, wil hij een lijst van speciale aanbiedingen op zijn site te publiceren. Hij wil deze aanbiedingen in een echte database tabel om te verblijven, en de gebruikers moeten in staat zijn om de aanbiedingen te sorteren op drie manieren.
Elk item heeft ook een detail pagina te hebben met meer, tekstuele informatie over het aanbod en de vorige en volgende knoppen. De vorige en volgende knoppen moeten wijzen op de naburige ingangen afhankelijk van het sorteren van de gebruiker voor de lijst had gekozen .
alt-tekst http://www.pekkagaiser.com/stuff/Sort.gif?
Uiteraard is de knop volgende voor Tomaten, klasse I moet zijn Appelen, klasse 1 in het eerste voorbeeld, Peren, klasse I in de tweede, en niemand in de derde.
De taak in de detailweergave is naar de volgende en vorige items te bepalen zonder dat een query elke keer , met de sorteervolgorde van de lijst als de enige beschikbare informatie (Laten we zeggen dat we dat door middel van een GET parameter ?sort=offeroftheweek_price, en de gevolgen voor de veiligheid te negeren) .
Het is duidelijk, eenvoudig passeren van de ID's van de volgende en vorige elementen als parameter is de eerste oplossing die bij me opkomt. Immers, we kennen de ID's op dit punt. Maar, dit is geen optie hier - het zou werken in dit vereenvoudigd voorbeeld, maar niet in veel van mijn echte wereld use cases.
Mijn huidige aanpak in mijn CMS is het gebruik van iets wat ik heb de naam sorteren cache. Wanneer er een lijst wordt geladen, ik bewaar het punt posities in records in een tabel met de naam 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
natuurlijk, het itemsis kolom echt bevolkt met numerieke ID's.
In de detailpagina, ik toegang tot nu de juiste sortingcacherecord, haal de itemskolom, exploderen het, op zoek naar de huidige item ID, en de terugkeer van de vorige en volgende buurman.
array(current => Tomatoes,
next => Pears,
previous => null
);
Dit is natuurlijk duur, werkt voor een beperkt aantal registreert alleen en creëert redundante data, maar laten we aannemen dat in de echte wereld, de query om de lijsten te maken is erg duur (het is), het runnen van het in elk detail uitzicht is uit de vraag, en sommige caching nodig is.
Mijn vragen:
Denk je dat dit is een goede gewoonte om erachter te komen de naburige records voor wisselende vraag orders?
Kent u betere praktijken in termen van prestaties en eenvoud? Heeft u iets dat dit volkomen overbodig maakt weten?
In de programmering theorie, is er een naam voor dit probleem?
Is de naam Sorting cache passend en begrijpelijk zijn voor deze techniek?
Zijn er erkend, gemeenschappelijke patronen om dit probleem op te lossen? Hoe worden ze genoemd?
Opmerking: Mijn vraag is niet over het bouwen van de lijst, of hoe je de details weer te geven. Dat zijn slechts voorbeelden. Mijn vraag is de basisfunctionaliteit van het bepalen van de buren van een record bij een re-query is onmogelijk, en de snelste en goedkoopste manier om er te komen.
Als er iets niet duidelijk is, kunt u een bericht en ik zal verduidelijken.
Het starten van een bounty - misschien is er wat meer informatie over deze die er zijn.














