我创建了一个查询,用于从MySQL服务器检索一些数据,并且在服务器上直接运行查询时查询效果很好。当我通过像Sequel Pro这样的程序运行查询时,它也可以很好地检索数据。但是,当插入ColdFusion .cfc
函数时,它会检索除timestamp字段之外的所有数据。我无法弄清楚为什么我的生活。这是CF函数后跟的查询。
SELECT tbl_names.*, max(tbl_timestamps.tstamp)
FROM tbl_names LEFT JOIN tbl_timestamps
ON tbl_names.name = tbl_timestamps.name
GROUP BY tbl_timestamps.name
<cffunction name="recent_timestamp" output="false" access="remote" returntype="any" >
<cfset var qAllItems="">
<cfquery name="qAllItems" datasource="TimeClock">
SELECT tbl_names.*, max(tbl_timestamps.tstamp)
FROM tbl_names LEFT JOIN tbl_timestamps
ON tbl_names.name = tbl_timestamps.name
GROUP BY tbl_timestamps.name
</cfquery>
<cfreturn qAllItems>
</cffunction>
当我运行应用程序时,调用.cfc
函数时,它会提取除时间戳之外的所有数据。这是Flash Builder给我的错误:
“返回的对象包含无效的属性名称”max(tbl_timestamps.timestamp)“。如果您使用的是使用组函数的数据库查询,请尝试在查询中使用该组函数的别名。我怎么能解决这个问题?我已经尝试了一切我能找到的东西。提前致谢!
答案 0 :(得分:4)
只需为max(tbl_timestamps.tstamp)提供别名即可。我猜你正在开发flex / flash项目,你可以远程调用CFC功能。实际上这不是ColdFusion错误,但Flex / flash构建无法使用列名max(tbl_timestamps.tstamp)解析查询,因此给出别名将解决此问题。
您的查询可能如下所示。
SELECT tbl_names.*, MAX(tbl_timestamps.tstamp) AS maxtstamp
FROM tbl_names LEFT JOIN tbl_timestamps
ON tbl_names.name = tbl_timestamps.name
GROUP BY tbl_timestamps.name
答案 1 :(得分:2)
我很惊讶查询在运行它时不会出错,因为你的select子句有tbl_names。*而你的group by子句有tbl_names.name。要修复它,请更改其中一个,使它们匹配。
就max(tbl_timestamps.tstamp)的别名而言,虽然您不一定需要一个查询在ColdFusion中运行,但如果您想对该字段执行任何操作,则需要一个,例如显示它