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関数が呼び出されると、タイムスタンプを除くすべてのデータがプルされます。これがFlashBuilderが私に与えるエラーです:

「返されたオブジェクトに無効なプロパティ名「max(tbl_timestamps.timestamp)」が含まれています。グループ関数を使用するデータベースクエリを使用している場合は、このグループ関数のクエリでエイリアスを使用してみてください。これを修正しますか?私は見つけることができるほぼすべてを試しました。よろしくお願いします!

4

2 に答える 2

4

max(tbl_timestamps.tstamp)のエイリアスを指定するだけで、機能するはずです。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
于 2013-01-03T05:16:27.930 に答える
2

select句にはtbl_names。*があり、group by句にはtbl_names.nameがあるため、クエリを実行するたびにエラーが発生しないことに驚いています。修正するには、それらの1つを変更して一致させます。

max(tbl_timestamps.tstamp)のエイリアスに関しては、ColdFusionでクエリを実行するために必ずしも必要ではありませんが、表示など、そのフィールドで何かを行う場合はエイリアスが必要になります。

于 2013-01-03T01:54:35.470 に答える