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

Select 如何在Coldfusion中从查询中选择特定记录?,select,coldfusion,resultset,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

我正在尝试优化产品搜索,以便在使用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的方法,因为用户从resultset中选择了一个结果,所以我为什么要重新构建resultset以获得一个结果呢

问题: 我想方法应该是传递一个变量,指示我只需要Exinstang查询中记录的详细信息。假设我有结果1-20,并且我传递了一个变量详细信息和一个articlenumber 123,我如何从现有结果集中选择匹配的记录=我如何从结果集中选择特定的记录?查询

编辑: 因此,我认为我的案例的唯一方法是第一次运行查询,将结果存储在Session.storage中,然后从存储中选择相应的记录,而不是重新运行我的初始搜索

查询的查询不起作用,因为我的初始查询在一个cfinvoke方法中,所以当它完成时,它就消失了,在下一个过程中,我无法查询上一个cfinvoke的结果

我还尝试将数据存储到我的cfc变量范围中。也不起作用,我猜也是出于同样的原因。我不想开始使用cfobject,因为我仍然在运行CF8,我读了很多关于cfobject如何影响性能的文章

无论如何。在我的第一个查询results中,我现在存储

<cfset Session.storate = results>
我现在的问题是:


如何循环session.storage并检查样式?如果找到,这是我的结果,我将从中构建详细视图。

我不确定是否遵循,但如果我是,您可以执行查询查询,这允许您查询页面上运行的现有查询

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

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

我不知道您为什么要重做搜索以获取单个记录。如果用户单击了详细信息链接,则该链接应具有指向所选项目的某些标识符。然后,我将使用该id查询数据库并获取产品详细信息。原始搜索查询只需要将相关数据返回到结果显示。

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

但是,用户搜索FoO和QueQ= GETALLRAMS以显示1-20的结果。当用户现在想要查看记录17的详细信息时,我不想再次查询,而是使用getAllRecords结果集中的第17条记录。我是否只需要遍历getAllRecords并检查articlenumber是否为123。如果是,则继续如果否,则不执行任何操作?我这样问是因为我的查询非常长,而且我在结果集中已经有了记录17,为什么我要重新运行查询以获取id为123的记录上面运行的查询是一个查询查询,这意味着它不会再次访问您的数据库,而是查询已经存在的查询。如果您只想显示记录,可以执行getAllRecords[columnname][17],其中17表示列中的当前行。确定。我不知道。如果我在CFC中执行此操作,在CFC中调用我的结果处理程序,原始查询是否仍然可用。可能不会……嗯。我仍然坐在上面。。。所以你有我的耳朵。让我试试。好的。我只提取第一个查询的基本信息,这对于通过MySQL获取大量的左连接和条件来说确实是一件痛苦的事情。我想避免反复运行这个查询,所以我的想法是,如果我第一次运行它,为什么我不能存储resultset Session.storage=queryName,然后从中提取细节基本记录,而不是重新运行查询本身。我需要这样做,因为实际的查询在cfinvoke中,所以当它完成时,它就消失了。我现在想知道如何在结果集上循环。。。看我的编辑这可能是一个痛苦,但你拉的数据是不需要的。假设为了参数起见,您的查询返回20列详细信息。搜索结果屏幕使用其中5列,详细信息屏幕使用其余列。现在,我们还要规定其中一列是包含大量数据的文本列。例如,假设查询返回1000个项目。您现在有大量的数据将被闲置。所有这些额外的数据加起来。导致额外的查询时间、额外的处理时间和额外的ram使用。这通常只是一种非常低效的处理方式。我知道这是一种痛苦…:-数据库以ean/条形码为基础存储文章,因此记录看起来像article、ean、info1、info2、info3。因此,一篇文章可能有任意数量的尺寸、颜色和其他标准。第一个查询我只是拉基本的文章信息文章,描述。。。并展示这个。当用户点击“详细信息”时,我需要提取所有文章来创建订单。所以我的想法是,如果我有20篇结果文章,我会存储这些,直到用户进行新的搜索。这样,当他点击详细信息时,我可以根据其中一个存储的记录选择eans,而不是重新查询,如果您可以在会话范围内缓存查询,则选择yes,但在用户使用sea时选择
rches for FOO并且结果被缓存,用户B在搜索BAR时会撞到墙,而不会得到任何结果。如果您使用cachedwithin属性执行点3,即您首先调用Q2的点3,那么当同一用户执行所有其他查询时,它们将被缓存。
<cfquery name="getOneRecord" dbtype="query">
SELECT record
FROM originalqueryname
WHERE articlenumber = 123
</cfquery>