说我有一个如下所示的查询。如果我不知道会有多少结果,那么将每个值放入数组的最佳方法是什么?通常我会用循环来做这个,但我不知道有多少结果。我是否需要运行另一个查询来首先计算结果?
<CFQUERY name="alllocations" DATASOURCE="#DS#">
SELECT locationID
FROM tblProjectLocations
WHERE projectID = '#ProjectName#'
</CFQUERY>
答案 0 :(得分:7)
根据您对数组的要求,您可以直接引用该列以进行大多数数组操作,例如:
i = arrayLen(alllocations["locationID"]);
使用该表示法将适用于大多数阵列操作。
请注意,这不是“创建数组”,只需要查询列 - coldfusion.sql.QueryColumn
对象足够接近CFML数组,以便CF能够将其转换为1数组需要。因此,列可以传递给数组函数。
不能做的是:
myArray = q["locationID"];
这是因为默认 CF会将q["locationID"]
视为字符串,如果可以的话,字符串值是locationID
列的第一行中的值。 q
查询。只有在数组实际需要时才会将CF转换为数组。这基本上是松散打字的方式。
因此,如果您只需要将查询列传递给某个需要数组的函数,则可以使用上面的语法。如果您想将列实际放入变量中,那么您需要执行以下操作:
myArray = listToArray(valueList(q.localtionID));
注意:请确保在过滤器值上使用<cfqueryparam>
,而不是将其硬编码到SQL语句中。
答案 1 :(得分:1)
myquery.column.toArray()
也是一个很好的无证选择。
答案 2 :(得分:0)
由于您只从查询中检索了1个字段值,因此可以使用ValueList()将查询结果转换为逗号分隔的locationIds列表,然后使用listToArray()将该列表更改为一个数组。
如果要从查询中检索多个字段值,那么您需要遍历查询,将给定行中的所有字段值复制到结构中,然后使用{{3将该结构添加到数组中}}
(如果您不熟悉这些功能,可以在Adobe文档或arrayAppend()上查找)。