Szukam najlepszego sposobu, aby pobrać następny i poprzednie rekordy rekordu bez uruchamiania pełnej kwerendy. Mam w pełni wdrożone rozwiązanie w miejscu, a chcieliby wiedzieć, czy są jakieś lepsze sposoby, aby to zrobić tam.
Powiedzmy budujemy stronę internetową dla fikcyjnej Warzywniak. W uzupełnieniu do swoich stron HTML, co tydzień, chce opublikować listę ofert specjalnych na swoim miejscu. Chce te oferty do przebywania w rzeczywistej tabeli bazy danych, a użytkownicy muszą mieć możliwość sortowania ofert na trzy sposoby.
Każdy element musi również mieć stronę z większą ilością szczegółów, informacji tekstowych o ofercie i „Poprzedni” i „Next” przycisków. „Poprzedniej” i „Dalej”, przyciski muszą wskazywać na sąsiednich wpisów w zależności od sortowania użytkownik wybrał na liście .
alt text http://www.pekkagaiser.com/stuff/Sort.gif?
Oczywiście, „next” przycisk „pomidory, klasa I” musi być „Jabłka, klasa 1” w pierwszym przykładzie „gruszki, klasa I” w sekundę, a żaden w trzecim.
Zadanie w widoku szczegółów jest do określenia następnego i poprzednie pozycje bez uruchamiania kwerendy za każdym razem , z porządkiem sortowania listy jako jedynej dostępnej informacji (powiedzmy mamy, że za pośrednictwem parametru GET ?sort=offeroftheweek_price, a ignorować wpływ na bezpieczeństwo) ,
Oczywiście, po prostu przekazując identyfikatory następnych i poprzednich elementów jako parametr jest pierwszym rozwiązaniem, które przychodzi do głowy. Po tym wszystkim, wiemy już identyfikator Jest w tym momencie. Ale to nie jest opcją tutaj - będzie pracować w tym uproszczonym przykładzie, ale nie w wielu moich przypadków użycia świata rzeczywistego.
Moje obecne podejście w moim CMS używa coś mam nazwie „sortowania pamięci podręcznej”. Gdy lista jest załadowany, przechowywać położenia elementu w ewidencji w tabeli o nazwie 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
Oczywiste jest, że itemskolumna jest naprawdę wypełnione identyfikatorów numerycznych.
Na stronie szczegółów, mam teraz dostępu do odpowiedniego sortingcacherekordu pobrać itemskolumnę, eksplodować go szukać aktualnej pozycji ID i powrócić do poprzedniego i następnego sąsiada.
array(current => Tomatoes,
next => Pears,
previous => null
);
Jest to oczywiście kosztowne, pracuje dla ograniczonej liczby tylko rekordy i tworzy nadmiarowe dane, ale załóżmy, że w realnym świecie, zapytanie do tworzenia list jest bardzo drogie (to jest), uruchomienie go w każdym szczególe widzenia jest z pytanie, a niektóre potrzebna jest buforowanie.
Moje pytania:
Czy uważasz, że jest to dobra praktyka, aby dowiedzieć się rekordy sąsiadującymi różnym rozkazy zapytań?
Czy wiesz lepszych praktyk w zakresie wydajności i prostoty? Czy coś, co sprawia, że ten całkowicie przestarzały wiedzieć?
W teorii programowania, jest tam nazwa tego problemu?
Czy nazwa „Sortowanie cache” jest właściwe i zrozumiałe dla tej techniki?
Czy istnieją jakieś wspólne wzorce uznane, aby rozwiązać ten problem? Jak one się nazywają?
Uwaga: Moje pytanie nie jest o budowaniu listy, lub w jaki sposób wyświetlić widok szczegółów. Są to tylko przykłady. Moje pytanie jest podstawowe funkcje wyznaczania sąsiadów rekordu kiedy ponowne zapytanie jest niemożliwe, a najszybszy i najtańszy sposób, aby się tam dostać.
Jeśli coś jest niejasne, proszę zostawić komentarz i będę wyjaśnić.
Począwszy bounty - może tam jest trochę więcej informacji na ten temat tam.














