ColdFusion基礎プログラミング



3-7レコードセットについて

<cfquery>タグを実行してデータベースから取得したデータをレコードセット( 結果セット) と呼びます。レコードセットとは、行 ( レコード)と列 ( フィールド) が含まれた一種のデータベーステーブルまたはスプレッドシート(Excel のシートのようなもの)と考えることができます。

下記の例では、ARTISTS とART テーブルから4つのカラム(ARTISTID,FIRSTNAME, LASTNAME,ARTNAME)のデータを取得していす。2つのテーブルの関連付けをARTISTID カラムで行っています。

<cfquery datasource="TRCF_dsn" name="qArtists">
SELECT ARTISTS.ARTISTID, ARTISTS.FIRSTNAME,
ARTISTS.LASTNAME, ART.ARTNAME
FROM ARTISTS, ART
WHERE ARTISTS.ARTISTID=ART.ARTISTID
</cfquery>

メモ:上記のSQL では、「テーブル名. カラム名」と記述して、どのテーブルからデータを取得するかを明示しています。これは、特に複数のテーブルで同じカラム名が存在するなど(今回の例ではARTISTID)において必要な記述となります。

ColdFusion は、取得したレコード(行)と、テーブル名を取り除いたカラム名(列)を含むレコードセットを取得し、ページ上で利用可能な変数として保管します。この変数のことをクエリー変数、またはクエリーオブジェクトと呼びます。上記例の実行結果は下記となります。

Tips特殊文字を使ったカラム名や集計関数の結果の保存

データベースからデータを取得する時に、集計した結果だけを戻すSQL、例えばレコード数を取得する Count() や最大値を取得するMax()、平均値を取得する Avg() などがあり、その結果にはカラム名が含まれていません。

ColdFusion は、取得したカラム名をもとに列(フィールド)を構成するためカラム名を含まない結果に対して、SQL のエイリアス機能を使用して任意の名前を設定します。例えばARTISTS テーブルのレコード数を集計し、何名のアーティストが登録されているかを調べる<cfquery> を紹介します。


<cfquery datasource="TRCF_dsn" name="qArtists">
SELECT Count(*) AS Artists_num
FROM ARTISTS </cfquery>


SQL のエイリアスはSQL のAS キーワードを使って作成します。上記の例では、ARTISTS テーブルのレコード数を集計し、その集計結果に対して Artists_num という別名を付けています。この名前を列(フィールド)に使用します。

SQL エイリアス機能は、他にも以下の用途で有効的に使用できます。

・複数のテーブルに同じ名前のカラムが存在し、それらをSELECT して結果を受け取りたいとき
→同じ名前で複数のカラムが作成される事を避けます

・列の名前に、ColdFusion で問題を引き起こす原因になり得る特殊文字やスペースが含まれていた場合
→カラム名≒変数名となるため、カラム名にそれら文字が含まれている時(日本語のカラム名なども)に問題が無い名前に変更します

・長い名前のカラム名などをもっと短く、分かり易くしたいとき