我有一个使用 Coldfusion8 和 MySQL 5.0.88 的产品搜索引擎
产品搜索有两种显示模式:多视图和单视图。
多个显示基本记录信息,单个需要从数据库中轮询附加数据。
现在用户进行搜索,我正在轮询数据库
(a)总记录和
(b)从 FROM 到 TO 的记录。
用户总是从他当前的结果集中进入单一视图,所以我的想法是为每个用户存储当前的结果集,而不必再次查询数据库来获取(浪费 a)记录总数和(浪费 b)单个记录我之前已经查询过,然后获取我仍然需要单视图的详细信息。
但是,我对此无能为力。
我无法缓存当前的结果集查询,因为它对每个用户(会话)都是唯一的。
查询在我通过 AJAX 调用的 CFC 内的 CFINVOKED 方法中运行,因此整个查询运行,然后 CFC 和 CFINVOKE 方法被丢弃,因此我不能使用查询或 variables.cfc_storage 的查询。
所以我的想法是将当前结果集存储在 Session 范围中,它将随着用户运行的每个新搜索(分页或全新搜索)而更新。存储的最大结果将是显示的结果数。
我可以使用以下方法存储查询:
<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次,以获取我之前已经提取的数据。
权衡是每个用户在 Session.scope 中拥有最多 48 个结果(每页的最大项目数)的结果集。
我的问题:
1. 这是可行的还是我应该重新查询数据库?
2.如果我有一个像上面这样的结构/数组/对象,我如何通过样式编号从中挑选出我需要的记录=我如何访问结果集?我不能只循环存储的查询(现在尝试了一段时间......)。
感谢帮助!