我正在尝试优化使用Coldfusion8 / MySQL在移动设备上使用的产品搜索。
现在发生以下情况:
1. user searches for "FOO"
2. Q1: search database for no of results
3. Q2: search again to get actual data for results FROM TO depending on pagination
4. user clicks details for a product
5. redo Q1 to get no of results
6. redo Q2 to get single result
7. use single result to query for product details (sizes, colors, pricings...)
我正在寻找一种跳过重做Q1和Q2的方法,因为用户从结果集中选择了一个结果,为什么我要重新生成结果集只是为了得到一个结果。
问题:
我想方法是传递一个变量,表明我只需要exinsting查询中记录的详细信息。假设我有结果1-20并且我传递变量“DETAIL”和文章编号“123”,我如何从现有结果集中选择匹配记录=如何从结果集中选择特定记录?uery
修改 所以我认为我的唯一方法是第一次运行查询,将结果存储在Session.storage中,然后从存储中选择相应的记录,然后重新运行我的初始搜索。
查询查询不起作用,因为我的初始查询在cfinvoke方法中,所以当它完成后,它就消失了,在下一次传递时我无法查询最后一个cfinvoke的结果。
我也尝试将存储到我的cfc变量范围中。同样不起作用,我猜也是出于同样的原因。我不想开始使用cfobject,因为我还在运行CF8,而且我正在阅读很多关于cfobject如何妨碍性能的内容。
反正。在我的第一个名为“results”的查询中,我现在正在存储
<cfset Session.storate = results>
当我转储会话存储时,我得到:
catch - 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) %402%
... 20 parameters
RESULTSET:
[Record # 1]
a: true
style: 402
price: 2.3
currency: CHF
...
[Record # 2]
a: true
style: 402abc
...
我现在的问题是:
如何循环 session.storage 并检查样式?如果找到,这是我的结果,我将从中构建详细视图。
答案 0 :(得分:4)
我不确定我是否关注,但如果我是,您可以执行查询查询,它允许您查询在您的页面上运行的现有查询。
<cfquery name="getOneRecord" dbtype="query">
SELECT record
FROM originalqueryname
WHERE articlenumber = 123
</cfquery>
如果您只需要检索一个结果,这可能是最快的方式。
答案 1 :(得分:2)
我不确定我理解为什么你会重做搜索以获得单个记录。如果用户单击了一个详细信息链接,该链接应该将某个标识符返回到所选项目。然后我会使用该id来查询数据库并获取产品详细信息。原始搜索查询应仅将相关数据返回到结果显示。
答案 2 :(得分:0)
要考虑的另一件事是cachedwithin属性。