【问题标题】:How to combine two arrays into a usable cfquery, or similar solution?如何将两个数组组合成一个可用的 cfquery 或类似的解决方案?
【发布时间】:2019-09-26 21:38:00
【问题描述】:

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

所以是这样的:

NUMBERS {1, 5, 15, 8}

TABLES {THISTAB1, THISTAB1, THISTAB2, THISTAB3}

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

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

使用示例数据,结果集应该是这样的:

Results {1,5}

任何想法都将不胜感激!

【问题讨论】:

  • 我希望我能在表格中看到更多数据。你能对它们做一个 cfdump 吗?
  • 我意识到以上是一种简化,但我们需要更多细节来确定是否有更好的方法。您能否提供一个您想要查询的数据的更好示例,包括几列,以便我们了解关系以及您如何查询数据。 1. 在几个表(THISTAB1、THISTAB2、THISTAB3)中发布经过净化的数据样本 2. ... 以及预期的结果。 3. "...结果集应该是这样的..." 数组中的其他两个表呢?该数据是否也应包含在结果中,如果包含,如何?
  • 我会在这里加入我的常规安全标志,但看起来您正在执行动态查询。您可能希望对这些数组进行大量验证,以确保允许用户查询您让他们查询的对象。这些数字是对列位置的引用吗?即SELECT 3 FROM someTableCREATEDQUERY 是包含您要运行的查询文本的表吗?我不确定您在此处尝试执行的操作的结构,但我会谨慎使用位置编号而不是特定列名来查询列。
  • 另外,我担心这可能是 XY 问题。退后一步,详细说明您要完成的工作,而不是您希望解决方案的外观。

标签: javascript arrays coldfusion coldfusion-2016 cfquery


【解决方案1】:

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

<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>

【讨论】:

    【解决方案2】:

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

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

    <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 年的大部分时间的项目的每个细节,或者显示我数据库中每个值的转储,这样有人可以告诉我如何使用,这对我有什么好处?查询添加列?并非所有问题都是神秘的,而这个问题非常简单。尝试根据提供给您的信息来思考,有些人正在处理敏感数据,就我而言,分享我的代码是我失业的最快方式。我觉得这种情况在 Stack Overflow 上经常发生,10 次中有 9 次,我不认为人们试图向你隐瞒任何事情,他们只是想保护自己。

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

    【讨论】:

    • 我刚刚发布了一个答案,多年来我一直在做这类事情。阅读您的问题后,我不需要更多信息,但我认为其他人的部分担忧是您试图使用基于用户输入的表建立查询,这是一个很大的危险信号。如果您的问题更笼统,并且是 Fruit 或类似的东西而不是 TableName,它可能会得到更快的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 2022-01-20
    相关资源
    最近更新 更多