У меня есть система поиска продуктов, использующая Coldfusion8 и MySQL 5.0.88
. Поиск товаров имеет два режима отображения:Множественный вид и Одиночный вид .
Несколько отображает основную информацию о записи, одиночное требует опроса дополнительных данных из базы данных.
Прямо сейчас пользователь выполняет поиск, и я опрашиваю базу данных для
(а)общее количество записей и
(б)записи ОТ до ДО.
Пользователь всегда переходит к Единому представлению из своего текущего набора результатов, поэтому моя идея состояла в том, чтобы сохранить текущий набор результатов для каждого пользователя и не нужно снова запрашивать базу данных, чтобы получить (впустую )общее число. записей и (отходов b )a единственная запись, которую я уже запрашивал ранее, И затем получаю подробную информацию, которая мне все еще нужна для одиночного представления.
Тем не менее, я ничего не получаю с этим.
Я не могу кэшировать текущий запрос набора результатов -, потому что он уникален для каждого сеанса пользователя ().
Запросы выполняются внутри метода CFINVOKED внутри CFC, который я вызываю через AJAX, поэтому выполняется весь запрос, а затем методы CFC и CFINVOKE отбрасываются, поэтому я не могу использовать запрос запроса или хранилища переменных.cfc _.
Итак, моя идея заключалась в том, чтобы сохранить текущий набор результатов в области сеанса, которая будет обновляться при каждом новом поиске, когда пользователь запускает (либо нумерацию страниц, либо совершенно новый поиск ). Максимальное количество сохраненных результатов равно количеству отображаемых результатов.
Я могу сохранить запрос, используя:
<cfset Session.resultset = query_name>
Это сохраняет весь запрос с результатами,вот так:
query
CACHED: false
EXECUTIONTIME: 2031
SQL: SELECT a.*, p.ek, p.vk, p.x, p.y
FROM arts a
LEFT JOIN p ON
...
LEFT JOIN f ON
...
WHERE a.aktiv = "ja"
AND
... 20 conditions...
SQLPARAMETERS: [array]
1)... 20+ parameters
RESULTSET:
[Record # 1]
a: true
style: 402
price: 2.3
currency: CHF
...
[Record # 2]
a: true
style: 402abc
...
Это будет перезаписываться каждый раз, когда пользователь выполняет новый поиск. Однако, если пользователь хочет просмотреть сведения об одном из этих элементов, мне не нужно запрашивать (общее количество записей и получать одну запись ), если я могу получить доступ к нужной мне записи из моего временного хранилища. Таким образом, я бы сэкономил два обращения к базе данных стоимостью 2031 времени выполнения каждое, чтобы получить данные, которые я уже извлек ранее.
Компромиссом будет каждый пользователь, имеющий набор результатов до 48 результатов (максимальное количество элементов на странице )в Session.scope.
Мои вопросы:
1. Возможно ли это или мне следует запросить базу данных?
2. Если у меня есть структура/массив/объект, подобный приведенному выше, как мне выбрать из него нужную мне запись по номеру стиля = как мне получить доступ к набору результатов? Я не могу просто перебрать сохраненный запрос (некоторое время пробовал это... ).
Спасибо за помощь!