1

我创建了一个查询来从 MySQL 服务器检索一些数据,并且当直接在服务器上运行它时,查询效果很好。当我通过像 Sequel Pro 这样的程序运行查询时,它也能很好地检索数据。但是,当插入 ColdFusion.cfc函数时,它会检索除时间戳字段之外的所有数据。我无法弄清楚为什么我的生活。这是 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)”。如果您使用的是使用组函数的数据库查询,请尝试在该组函数的查询中使用别名。关于我如何做的任何想法解决这个问题?我已经尝试了所有我能找到的东西。提前致谢!

4

2 回答 2

4

只需为 max(tbl_timestamps.tstamp) 提供别名,它应该可以工作。我猜你正在处理远程调用 CFC 函数的 flex/flash 项目。实际上,这不是 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
于 2013-01-03T05:16:27.930 回答
2

我很惊讶无论何时运行查询都不会出错,因为您的 select 子句具有 tbl_names.* 而您的 group by 子句具有 tbl_names.name。要修复它,请更改其中之一以使其匹配。

至于 max(tbl_timestamps.tstamp) 的别名,虽然在 ColdFusion 中运行查询不一定需要一个别名,但如果您想对该字段执行任何操作(例如显示它),则需要一个别名。

于 2013-01-03T01:54:35.470 回答