Busco la mejor manera de recuperar los registros anterior y siguiente de un registro sin ejecutar una consulta completa. Tengo una solución totalmente implementado en su lugar, y me gustaría saber si hay algún mejores enfoques para hacer esto por ahí.
Digamos que estamos construyendo un sitio web para una frutería ficticia. Además de sus páginas HTML, todas las semanas, quiere publicar una lista de ofertas especiales en su sitio. Él quiere que esas ofertas a residir en una tabla de base de datos real, y los usuarios tienen que ser capaces de ordenar las ofertas de tres maneras.
Cada elemento también tiene que tener una página con más información detallada, textual sobre la oferta y los botones anterior y siguiente. El anterior y los botones siguiente tienen que apuntar a las entradas vecinos en función de la clasificación del usuario hubiera elegido para la lista .
alt text http://www.pekkagaiser.com/stuff/Sort.gif?
Obviamente, el botón siguiente para Tomates, Clase I tiene que ser Manzanas, clase 1 en el primer ejemplo, Peras, clase I en la segunda, y ninguno en el tercero.
La tarea en la vista de detalle es para determinar los artículos siguientes y anteriores sin ejecutar una consulta cada vez que , con el orden de la lista como la única información disponible (Digamos que tenemos que a través de un parámetro GET ?sort=offeroftheweek_price, e ignorar las implicaciones de seguridad) .
Obviamente, sólo tiene que pasar los ID de los elementos siguientes y anteriores como parámetro es la primera solución que viene a la mente. Después de todo, ya sabemos la década de identificación en este punto. Sin embargo, esto no es una opción aquí - que funcionaría en este ejemplo simplificado, pero no en muchas de mis casos de uso del mundo real.
Mi enfoque actual en mi CMS está utilizando algo que he llamado clasificación de caché. Cuando se carga una lista, almaceno las posiciones de los elementos en los registros de una tabla llamada 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
Obviamente, la itemscolumna está muy poblada con identificadores numéricos.
En la página de detalles, ahora acceder al adecuado sortingcacheregistro, ir a buscar la itemscolumna, explotarlo, buscar el ID de elemento actual, y devolver el vecino anterior y siguiente.
array(current => Tomatoes,
next => Pears,
previous => null
);
Esto es obviamente caro, funciona para un número limitado de sólo registra y crea los datos redundantes, pero vamos a suponer que en el mundo real, la consulta para crear las listas es muy caro (es), corriendo en todas las vistas de detalle está fuera de la pregunta, y algunos se necesita almacenamiento en caché.
Mis preguntas:
¿Usted piensa que esto es una buena práctica para averiguar los registros de vecinos para variar las órdenes de consulta?
¿Conoce mejores prácticas en términos de rendimiento y simplicidad? ¿Sabe usted algo que hace que esta completamente obsoleto?
En teoría de la programación, hay un nombre para este problema?
Es el nombre de caché Clasificación es apropiada y comprensible para esta técnica?
¿Hay alguna reconocidos, patrones comunes para resolver este problema? ¿Cómo se llaman?
Nota: Mi pregunta no es sobre la construcción de la lista, o cómo mostrar la vista de detalle. Estos son sólo ejemplos. Mi pregunta es la funcionalidad básica de la determinación de los vecinos de un registro cuando un re-consulta es imposible, y la manera más rápida y barata para llegar allí.
Si algo no está claro, por favor deje un comentario y voy a aclarar.
A partir de una recompensa - tal vez hay algo más de información sobre este por ahí.














