Sto cercando il modo migliore per recuperare i record precedente e successiva di un record senza eseguire una query full. Ho una soluzione pienamente attuato in atto, e vorrei sapere se ci sono approcci di meglio per farlo là fuori.
Diciamo che stiamo costruendo un sito web per un fruttivendolo fittizia. In aggiunta alle sue pagine HTML, ogni settimana, vuole pubblicare un elenco delle offerte speciali sul suo sito. Vuole queste offerte di risiedere in una tabella di database vero e proprio, e gli utenti devono essere in grado di selezionare le offerte in tre modi.
Ogni articolo deve avere anche una pagina di dettaglio con ulteriori, informazioni testuali sull'offerta e pulsanti precedenti e Avanti. Il precedente e pulsanti Avanti devono puntare alle voci vicine a seconda della selezione che l'utente aveva scelto per la lista .
alt text http://www.pekkagaiser.com/stuff/Sort.gif?
Ovviamente, il pulsante next per Pomodori, classe I deve essere Mele, classe 1 nel primo esempio, Pere, classe I nel secondo, e nessuno nel terzo.
Il compito nella visualizzazione dettagliata è di determinare le voci successive e precedenti senza esecuzione di una query ogni volta , con l'ordinamento della lista come le uniche informazioni disponibili (Diciamo otteniamo che, attraverso un parametro GET ?sort=offeroftheweek_price, e ignorare le implicazioni di sicurezza) .
Ovviamente, semplicemente passando gli ID degli elementi precedente e successivo come parametro è la prima soluzione che viene in mente. Dopo tutto, abbiamo già conoscere l'ID di a questo punto. Ma, questo non è un'opzione qui - che avrebbe funzionato in questo esempio semplificato, ma non in molti dei miei casi d'uso reali.
Il mio attuale approccio nel mio CMS sta usando qualcosa che ho chiamato l'ordinamento cache. Quando un elenco viene caricato, devo conservare le posizioni degli oggetti in record in una tabella di nome 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
ovviamente, la itemscolonna è davvero popolata con ID numerici.
Nella pagina dei dettagli, io ora accedo al appropriata sortingcachecronaca, prendere la itemscolonna, esplodere, cercare l'ID elemento corrente, e restituire il vicino precedente e successivo.
array(current => Tomatoes,
next => Pears,
previous => null
);
Questo è ovviamente costoso, lavora per un numero limitato di soli record e crea i dati ridondanti, ma supponiamo che nel mondo reale, la query per creare le liste è molto costoso (è), in esecuzione in ogni dettaglio è fuori la questione, e un po ' è necessaria la memorizzazione nella cache.
Le mie domande:
Pensi che questa è una buona pratica per scoprire i record vicini per diversi ordini di query?
Sai le pratiche migliori in termini di prestazioni e semplicità? Sai una cosa che rende questo del tutto obsoleto?
In teoria la programmazione, c'è un nome per questo problema?
È il nome di cache Ordinamento è appropriato e comprensibile per questa tecnica?
Ci sono riconosciuti, modelli comuni per risolvere questo problema? Come si chiamano?
Nota: La mia domanda non è di costruire la lista, o il modo di visualizzare la vista di dettaglio. Questi sono solo esempi. La mia domanda è la funzionalità di base di determinare i vicini di un record quando un re-query è impossibile, e il modo più veloce e più economico per arrivarci.
Se qualcosa non è chiaro, si prega di lasciare un commento e io chiarire.
Avvio di una taglia - forse c'è un po 'di informazioni là fuori.














