我可以通过指数的ColdFusion获得查询行?(Can I get a query row by

2019-06-27 09:16发布

我想在一个ColdFusion查询对象的特定行没有遍历它。

我想这样做:

<cfquery name="QueryName" datasource="ds">
SELECT *
FROM    tablename
</cfquery>

<cfset x = QueryName[5]>

但它给我一个错误,指出该查询是不是“5”可转位。 我知道一个事实,即有超过5条记录在此查询。

Answer 1:

你不能在CF行<= 10,你必须得到一个特定的列。

<cfset x = QueryName.columnName[5]>

它已有8年,因为我张贴了这个答案,但是。 显然,CF11终于实现该功能。 见FrankieZ的答案 。



Answer 2:

这可现在的ColdFusion 11通过完成QueryGetRow

<cfquery name="myQuery" result="myresult" datasource="artGallery" fetchclientinfo="yes" >
select * from art where ARTID >
<cfqueryparam value="2" cfsqltype="CF_SQL_INTEGER">
</cfquery>

<cfdump var="#myQuery#" >

<cfset data = QueryGetRow(myQuery, 1) >

<cfdump var="#data#" >


Answer 3:

我认为这是一个简单的解决方案...我猜你知道你的列名,并只希望此列或那一个。 然后,你不需要把整个行中的结构。 您可以参考由行号查询(记住它基于1不为0)。

yourQueryName [ “yourColumnName”] [ROWNUMBER]

<cfoutput>
     #mycontacts["Name"][13]#
     #mycontacts["HomePhone"][13]# 
</cfoutput>


Answer 4:

你要查询一个struct先转换:

<cfscript>
    function GetQueryRow(query, rowNumber) {
        var i = 0;
        var rowData = StructNew();
        var cols = ListToArray(query.columnList);
        for (i = 1; i lte ArrayLen(cols); i = i + 1) {
            rowData[cols[i]] = query[cols[i]][rowNumber];
        }
        return rowData;
    }
</cfscript>

<cfoutput query="yourQuery">
    <cfset theCurrentRow = GetQueryRow(yourQuery, currentRow)>
    <cfdump var="#theCurrentRow#">
</cfoutput>

希望这点你在正确的方向。



Answer 5:

我知道我回来这个线程任何时候我谷歌“CFQUERY括号标记”。 下面是我写的用括号符号来处理这种情况的功能。 希望这可以帮助别人太:

<cffunction name="QueryGetRow" access="public" returntype="array" hint="I return the specified row's data as an array in the correct order">
    <cfargument name="query" required="true" type="query" hint="I am the query whose row data you want">
    <cfargument name="rowNumber" required="true" hint="This is the row number of the row whose data you want">

    <cfset returnArray = []>
    <cfset valueArray = []>

    <cfset cList = ListToArray(query.ColumnList)>
    <cfloop from="1" to="#ArrayLen(cList)#" index="i">
        <cfset row = query["#cList[i]#"][rowNumber]>
        <cfset row = REReplace(row, "(,)", " ")>
        <cfset returnArray[i] = row>
        <cfset i++>
    </cfloop>   
    <cfreturn returnArray>
</cffunction>

该REReplace是可选的,我有它在那里清洗逗号,这样,如果你必须使用它,它不会搞砸后来就arrayToList功能。



Answer 6:

我想从查询中提取单个行,并保持列名(当然)。 这是我如何解决它:

<cffunction name="getQueryRow" returntype="query" output="no">
    <cfargument name="qry" type="query" required="yes">
    <cfargument name="row" type="numeric" required="yes">
    <cfset arguments.qryRow=QueryNew(arguments.qry.columnlist)>
    <cfset QueryAddRow(arguments.qryRow)>
    <cfloop list="#arguments.qry.columnlist#" index="arguments.column">
        <cfset QuerySetCell(arguments.qryRow,arguments.column,Evaluate("arguments.qry.#arguments.column#[arguments.row]"))>
    </cfloop>
    <cfreturn arguments.qryRow>
</cffunction>


Answer 7:

以前通过列名和行号(variables.myquery [“列名”] [ROWNUMBER])获取查询数据描述的方法是正确的,但不便于得到一个完整的行查询数据。

我跑Railo 4.1。 这是一个很酷的解决方案。 太糟糕了,这不能做,我们希望直接获得一个完整的行数据的方式,但下面的方法可以让我们得到我们想要通过几个铁圈。

当你serializeJSON(variables.myquery)它改变了查询JSON格式CFML结构对象有两个项目:“列”和“数据”。 这两者都是数据的数组。 “数据”阵列对于行,然后列数据的二维阵列。

问题是,现在我们有一个不可用的字符串。 那么,如果我们重新序列化它不是一个查询,但在上述的格式,而使用常规的结构。

假设我们已经有一个名为“variables.myquery”查询变量。 然后看下面的代码:

<cfset variables.myqueryobj = deserializeJSON(serializeJSON(variables.myquery)) />

现在,您可以通过获得这个弄二维数组:

<cfset variables.allrowsarray = variables.myqueryobj.data />

而你通过得到该得到一个查询排阵:

<cfset variables.allrowsarray = variables.myqueryobj.data[1] />

或最后一行是这样的:

<cfset variables.allrowsarray = variables.myqueryobj.data[variables.myquery.recordCount] />

而且你可以得到由列订单号迭代各个列值:

<cfset variables.allrowsarray = variables.myqueryobj.data[1][1] />

现在,这可能是缓慢的,并可能是不明智的大型查询结果,但是这是一个很酷的解决方案仍然。



Answer 8:

检查出的文档queryGetRow 。 它接受查询对象,并且与第一行的行的索引为1(NOT 0)的索引用这样的方式被要求是一个正整数的索引被引用。

<cfquery name="QueryName" datasource="ds">
  SELECT *
  FROM tablename
</cfquery>

<!---
    This would retrieve the first record of the query
    and store the record in a struct format in the variable 'x'.
--->
<cfset x = queryGetRow(QueryName, 1) />
<!---
    This is an alternative using the member method form of queryGetRow
--->
<cfset x = QueryName.getRow(1) />


文章来源: Can I get a query row by index in ColdFusion?