有没有办法将每行的值从数据库中获取到数组中?

时间:2013-05-08 11:15:02

标签: coldfusion coldfusion-9

说我有一个如下所示的查询。如果我不知道会有多少结果,那么将每个值放入数组的最佳方法是什么?通常我会用循环来做这个,但我不知道有多少结果。我是否需要运行另一个查询来首先计算结果?

<CFQUERY name="alllocations" DATASOURCE="#DS#">
    SELECT locationID 
    FROM   tblProjectLocations
    WHERE  projectID = '#ProjectName#'
</CFQUERY>

3 个答案:

答案 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()上查找)。