2

我正在尝试使用 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 的方法,因为用户从结果集中选择了一个结果,那么我为什么要再次重建结果集以获得一个结果。

问题
我想方法是传递一个变量,表明我只需要现有查询中记录的详细信息。假设我有结果 1-20,并且我传递了一个变量“DETAIL”和一个文章编号“123”,我将如何从现有结果集中选择匹配记录 = 如何从结果集中选择特定记录?

编辑: 所以我认为我的情况的唯一方法是第一次运行查询,将结果存储在 Session.storage 中,然后从存储中选择相应的记录与重新运行我的初始搜索。

Query of Queries 不起作用,因为我的初始查询在 cfinvoke 方法中,所以当它完成后,它就消失了,在下一次通过时,我无法查询最后一个 cfinvoke 的结果。

我还尝试将其存储到我的 cfc 变量范围中。也不起作用,我想也是出于同样的原因。我不想开始使用 cfobject,因为我仍在运行 CF8,而且我正在阅读很多关于 cfobject 如何影响性能的内容。

反正。在我的第一个名为“结果”的查询中,我现在正在存储

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

4

3 回答 3

4

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

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

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

于 2012-07-13T13:13:23.980 回答
2

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

于 2012-07-13T15:30:19.350 回答
0

要考虑的另一件事是缓存在属性内。

于 2012-07-13T18:27:52.543 回答