Bri*_*ton 35 coldfusion cfquery cfml
我想在ColdFusion Query对象中获取特定行而不循环它.
我想做这样的事情:
<cfquery name="QueryName" datasource="ds">
SELECT *
FROM tablename
</cfquery>
<cfset x = QueryName[5]>
Run Code Online (Sandbox Code Playgroud)
但它给了我一个错误,说该查询不能被"5"索引.我知道这个查询中有超过5条记录.
Pat*_*ney 65
你不能在CF <= 10中获得一行.你必须获得一个特定的列.
<cfset x = QueryName.columnName[5]>
Run Code Online (Sandbox Code Playgroud)
然而,我发布这个答案已经8年了.显然CF11终于实现了这个功能.见FrankieZ的回答.
Fra*_*erZ 12
现在可以通过QueryGetRow在coldfusion 11中完成
<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#" >
Run Code Online (Sandbox Code Playgroud)
您必须先将查询转换为结构:
<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>
Run Code Online (Sandbox Code Playgroud)
希望这能指出你正确的方向.
我认为有一个更简单的解决方案...我猜你知道你的列名,只想要这个或那个列.然后,您不需要将整行放在结构中.您可以按行号引用查询(请记住它的1基于非0).
<cfoutput>
#mycontacts["Name"][13]#
#mycontacts["HomePhone"][13]#
</cfoutput>
Run Code Online (Sandbox Code Playgroud)
我知道每当我谷歌"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>
Run Code Online (Sandbox Code Playgroud)
REReplace是可选的,我在那里清理逗号,以便以后如果必须使用它就不会搞砸arrayToList函数.
归档时间: |
|
查看次数: |
55356 次 |
最近记录: |