如何将两个数组组合成一个可用的 cfquery 或类似的解决方案?



我有两个数组作为表单变量从报表页传递到打印页。这些数组是在用户浏览报表并选中复选框时构建的。我需要基于两个数组进行查询。 一个数组包含数字,另一个数组包含数据库表名。 数组目前没有大小限制,但我看不到它超过 100 个值,所以我可以说每个数组中的数组值数量将始终相等,但范围可能在 1 - 100 个值之间。 我的问题是 tables 数组包含一个表列表,其中包含许多重复值。 每个表附带的数字与 numbers 数组中的数字位于表数组的同一索引处,因此它们在 idex 上匹配。

所以像这样:

NUMBERS {1, 5, 15, 8}
TABLES {THISTAB1, THISTAB1, THISTAB2, THISTAB3}

有没有办法将这两者组合成一个可查询的对象? 我希望能够做这样的事情:

<cfquery>
SELECT NUMBERS FROM CREATEDQUERY
WHERE TABLENAME = THISTAB1
</cfquery>

使用示例数据,结果集应如下所示:

Results {1,5}

任何想法将不胜感激!

我建议使用带有表名键和数组或数字列表的结构。这是直截了当的,但如果有任何担忧,这也更高性能。根据我的经验,"查询查询"非常慢,因此如果您需要遍历并运行其中的许多查询,那么这是一个更好的选择。

<cfset tableData = {} />
<cfloop from="1" to="#arrayLen(tables)#" index="t">
<cfif not structKeyExists(tableData, tables[t])>
<cfseet tableData[tables[t]] = [] />
</cfif>
<cfset arrayAppend(tableData[tables[t]], numbers[t] />  
</cfloop>
<cfoutput>#tableData[THISTAB1]#</cfoutput>

解决方案如下,以防其他人遇到此问题:

创建一个查询,您必须至少有一列,所以我只是添加了一个空列。

<cfset newqueryname = QueryNew("anyval", "Integer")> 

然后将数组数据添加为新列,

<cfset QueryAddColumn(newqueryname, "numbers", "integer", NUMBERS)>
<cfset QueryAddColumn(newqueryname, "tables", "varchar", TABLES)>

从那里你有一个可以实际使用的查询。

<cfquery name="differentqueryname" dbtype="query">
select numbers from newqueryname where
tables = 'TABLE_NAME'
</cfquery>
Results {1,5}

我很欣赏那些花时间回答的人,但是Stack Overflow有一个很大的问题。 我可以问如何在 Java 中创建一个简单的 if 语句,5 个人会评论说他们需要更多信息才能回答这个问题。产生了哪些新信息,但我能够回答这个问题? 解释我已经工作了 2 年的大部分时间的项目的每个细节,或者显示数据库中每个值的转储,以便有人可以告诉我如何使用 QueryAddColumn,这对我有什么好处? 并非所有问题都是神秘的,这个问题非常简单。 试着用提供给你的信息来思考,有些人正在使用敏感数据,就我而言,分享我的代码是我失业的最快方式。 我觉得这种情况在 Stack Overflow 上经常发生,10 次中有 9 次,我认为人们并没有试图向你隐瞒任何事情,他们只是想保护自己。

希望这对将来的某人有所帮助。

相关内容

  • 没有找到相关文章

最新更新