Je cherche la meilleure façon de récupérer les enregistrements suivants et précédents d'un enregistrement sans exécuter une requête complète. J'ai une solution pleinement mis en œuvre en place, et je voudrais savoir s'il y a des meilleures approches pour le faire là-bas.
Disons que nous sommes en train de construire un site web pour une fruiterie fictive. En plus de ses pages HTML, chaque semaine, il veut publier une liste des offres spéciales sur son site. Il veut que ces offres de résider dans une table de base de données réelle, et les utilisateurs doivent pouvoir trier les offres de trois façons.
Chaque article doit également avoir une page de détail plus, des informations textuelles sur l'offre et les boutons « précédent » et « suivant ». Le « précédent » et les boutons « suivant » doivent pointer vers les entrées voisines en fonction du tri de l'utilisateur avait choisi pour la liste .
alt texte http://www.pekkagaiser.com/stuff/Sort.gif?
De toute évidence, le bouton « Suivant » pour « Tomates, classe I » doit être « pommes, classe 1 » dans le premier exemple, « poires, classe I » dans la seconde, et aucun dans le troisième.
La tâche dans la vue détaillée est de déterminer les éléments suivants et précédents sans exécuter une requête à chaque fois , avec l'ordre de tri de la liste que la seule information disponible (Disons que nous obtenons que grâce à un paramètre GET ?sort=offeroftheweek_price, et ignorer les implications de sécurité) .
De toute évidence, en passant simplement les ID des éléments suivants et précédents en tant que paramètre est la première solution qui vient à l'esprit. Après tout, nous savons déjà les ID à ce point. Mais, ce n'est pas une option ici - il travaillerait dans cet exemple simplifié, mais pas dans beaucoup de mon vrai cas d'utilisation du monde.
Mon approche actuelle dans mon CMS utilise quelque chose que j'ai appelé « cache de tri ». Lorsqu'une liste est chargée, je stocke les positions de poste dans les enregistrements dans une table nommée 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
De toute évidence, la itemscolonne est vraiment peuplé avec les ID numériques.
Dans la page de détail, j'accéder maintenant approprié sortingcacheenregistrement, chercher la itemscolonne, exploser, rechercher l'ID de l' article, et le retour du voisin précédent et suivant.
array(current => Tomatoes,
next => Pears,
previous => null
);
Ceci est évidemment cher, travaille pour un nombre limité d'enregistrements uniquement et crée des données redondantes, mais supposons que dans le monde réel, la requête pour créer les listes est très cher (il est), il en cours d' exécution dans chaque vue détaillée est de la question, et une mise en cache est nécessaire.
Mes questions:
Pensez-vous que cela est une bonne pratique pour connaître les dossiers voisins pour faire varier les commandes de requête?
Savez-vous de meilleures pratiques en termes de performance et de simplicité? Savez-vous quelque chose qui fait cela complètement obsolète?
Dans la théorie de la programmation, est-il un nom pour ce problème?
Est-ce le nom de « tri cache » est approprié et compréhensible pour cette technique?
Y at-il reconnu, des modèles communs pour résoudre ce problème? Que sont-ils appelés?
Remarque: Ma question ne porte pas sur la construction de la liste, ou comment afficher la vue détaillée. Ce sont là que quelques exemples. Ma question est la fonctionnalité de base de la détermination des voisins d'un enregistrement quand une nouvelle requête est impossible, et le plus rapide et le moins cher pour y arriver.
Si quelque chose ne sait pas, s'il vous plaît laisser un commentaire et je vais clarifier.
À partir d'une prime - peut-être il y a un peu plus d'informations sur ce là-bas.














