如何从Coldfusion中的查询中选择特定记录?

时间:2012-07-13 12:36:50

标签: select coldfusion resultset

我正在尝试优化使用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 并检查样式?如果找到,这是我的结果,我将从中构建详细视图。

3 个答案:

答案 0 :(得分:4)

我不确定我是否关注,但如果我是,您可以执行查询查询,它允许您查询在您的页面上运行的现有查询。

<cfquery name="getOneRecord" dbtype="query">
SELECT record
FROM originalqueryname
WHERE articlenumber = 123
</cfquery>

如果您只需要检索一个结果,这可能是最快的方式。

答案 1 :(得分:2)

我不确定我理解为什么你会重做搜索以获得单个记录。如果用户单击了一个详细信息链接,该链接应该将某个标识符返回到所选项目。然后我会使用该id来查询数据库并获取产品详细信息。原始搜索查询应仅将相关数据返回到结果显示。

答案 2 :(得分:0)

要考虑的另一件事是cachedwithin属性。