Я ищу лучший способ для извлечения следующей и предыдущей записи записи без запуска полного запроса. У меня есть полностью реализованное решение на месте, и хотел бы знать, есть ли какие-либо лучше подходит, чтобы сделать это там.
Допустим, мы строим веб-сайт для вымышленного зеленщика. В дополнение к его HTML-страниц, каждую неделю, он хочет, чтобы опубликовать список специальных предложений на своем сайте. Он хочет, чтобы эти предложения, чтобы постоянно находиться в реальной таблице базы данных, и пользователи должны иметь возможность сортировать предложения по трем направлениям.
Каждый элемент также должен иметь детализированную страницу с дополнительной, текстовой информацией о предложении и «предыдущей» и «последующей» кнопкой. «Предыдущий» и «следующий» кнопки нужно указать на соседние записи в зависимости от сортировки пользователь выбрал для списка .
альтернативный текст http://www.pekkagaiser.com/stuff/Sort.gif?
Очевидно, что кнопка «далее» для «томаты, класс I» должен быть «Яблоки, класс 1» в первом примере, «Груши, класс I» в секунду, и ни в третьем.
Задача в детальном это определить последующие и предыдущие элементы без выполнения запроса каждый раз , с порядком сортировки списка в качестве единственной имеющейся информации (скажем , мы получим , что с помощью параметра GET ?sort=offeroftheweek_price, и игнорировать последствия для безопасности) ,
Очевидно, просто передавая идентификаторы следующих и предыдущих элементов в качестве параметра является первым решением, которое приходит на ум. В конце концов, мы уже знаем идентификаторы в этой точке. Но, это не вариант здесь - он будет работать в этом упрощенном примере, но не во многих моих реальных случаев использования.
Мой текущий подход в моей CMS использует что - то я назвал «сортировкой кэша». Когда список будет загружен, я храню позицию записи в записи в таблице с именем 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
очевидно, что itemsстолбец действительно заполняется числовыми идентификаторами.
На странице подробно, я теперь получить доступ к соответствующей sortingcacheзаписи, принести itemsстолбец, взорвать его, искать для текущего элемента ID, и возврата к предыдущему и следующему соседу.
array(current => Tomatoes,
next => Pears,
previous => null
);
Это, очевидно , дорого, работает для ограниченного числа только записей и создает избыточные данные, но давайте предположим , что в реальном мире, то запрос , чтобы создать списки очень дорого (это), запустив его в каждом детальном вне вопрос, а некоторые нужно кэширование.
Мои вопросы:
Как вы думаете, это хорошая практика, чтобы выяснить, соседние записи для изменения заказов запроса?
Вы знаете, лучше практики с точки зрения производительности и простоты? Вы знаете что-то, что делает это полностью устаревшим?
В теории программирования, есть название для этой проблемы?
Является ли имя «Сортировка кэш» подходит и понятно для этой техники?
Существуют ли какие-либо признанные, общие закономерности, чтобы решить эту проблему? Как они называются?
Примечание: Мой вопрос не о создании списка, или как отобразить подробный вид. Таковы лишь некоторые примеры. Мой вопрос является основным функциональность определения соседей записи при повторной запроса невозможно, и самый быстрый и дешевый способ добраться туда.
Если что-то неясно, пожалуйста, оставьте комментарий, и я уточню.
Начиная Баунти - может быть, есть еще немного информации об этом там.














