1

CFC からタイプのリストを取得し、それを JSON として返そうとしています。問題は、JSON の構造をどのように作成するかです。これをjson形式で取得しようとして頭を悩ませてきましたが、現在書かれているようにそれが可能かどうかはわかりません。

これがセットアップです。4 つのテーブルがありますが、1 つの列を除いてすべて同じです。各テーブルから複数の行が必要です。

次のように、各テーブルから適切なデータを取得しようとしました。

<cfscript>
    tempStruct = setAttributionTypes(dsn,type);
    tempStruct = setCharacteristicTypes(dsn,type);
    //tempArray = setExposureTypes(dsn,type);
    //tempArray = setWeightTypes(dsn,type);             
</cfscript>

ご覧のとおり、さまざまな方法を試していました。構造体の作成、および構造体の配列の作成 (表示されていません)

すべてのフィールドを 1 つの列に戻すために使用している現在のクエリを次に示します。

<cfquery name="getAllTypes" datasource="#dsn#">
    SELECT udc_code,
           type
    FROM(
        SELECT attribution_id AS udc_code,type
        FROM   tbl_asset_profile_template_attributions
        WHERE  template_id = <cfqueryparam cfsqltype="cf_sql_varchar" value="#type#">
        UNION ALL
        SELECT characteristic_id AS udc_code,type
        FROM   tbl_asset_profile_template_characteristics
        WHERE  template_id = <cfqueryparam cfsqltype="cf_sql_varchar" value="#type#">
        UNION ALL
        SELECT exposure_id AS udc_code,type
            FROM   tbl_asset_profile_template_exposures
        WHERE  template_id = <cfqueryparam cfsqltype="cf_sql_varchar" value="#type#">
        UNION ALL
        SELECT weight_id AS udc_code,type
        FROM   tbl_asset_profile_template_weights
        WHERE  template_id = <cfqueryparam cfsqltype="cf_sql_varchar" value="#type#">) AS tbl
    GROUP  BY type,
                 udc_code
    ORDER  BY type 
</cfquery>

のような構造を作成しました[{'attribution1':data,...}{...}]が、それを処理するのはかなり困難です。

私はこのような構造を作成しようとしてきました:

 [{ATTRIBTUIONS{'TYPE1','TYPE2',}},{CHARACTERISTICS{'TYPE1',...}}]

必要なものを視覚化するのに苦労しています。

何かご意見は?

4

1 に答える 1

1

クエリの調整とデータのマッサージを少し行うと、必要な json オブジェクトを取得できます。

1) クエリを次のように変更します。

<cfquery name="getAllTypes" datasource="#dsn#">
SELECT profilename,udc_code
FROM (
    SELECT attribution_id AS udc_code, type, 'Attributions' AS profilename
    FROM   tbl_asset_profile_template_attributions
    WHERE  template_id = <cfqueryparam cfsqltype="cf_sql_varchar" value="#type#">
    UNION ALL
    SELECT characteristic_id AS udc_code, type, 'Characteristics' AS profilename
    FROM   tbl_asset_profile_template_characteristics
    WHERE  template_id = <cfqueryparam cfsqltype="cf_sql_varchar" value="#type#">
    UNION ALL
    SELECT exposure_id AS udc_code, type, 'Exposures' AS profilename
    FROM   tbl_asset_profile_template_exposures
    WHERE  template_id = <cfqueryparam cfsqltype="cf_sql_varchar" value="#type#">
    UNION ALL
    SELECT weight_id AS udc_code, type, 'Weights' AS profilename
    FROM   tbl_asset_profile_template_weights
    WHERE  template_id = <cfqueryparam cfsqltype="cf_sql_varchar" value="#type#">) AS tbl
GROUP  BY profilename, type, udc_code
ORDER  BY profilename, type 
</cfquery>

2) データを保持する構造体を作成し、GROUP 属性を指定して cfoutput を使用してデータを入力します。

<cfset stTypes = structnew()>

<cfoutput query="getAllTypes" group="profilename">
 <cfset stTypes[getAllTypes.profilename] = arraynew(1)>
 <cfoutput>
  <cfset arrayappend(stTypes[getAllTypes.profilename], getAllTypes.type)>
 </cfoutput>
</cfoutput>

3) 構造体を json オブジェクトにシリアル化します。

<cfset jsonobj = serializejson(stTypes)>

これにより、次のような json オブジェクトが作成されます。

{'Attributions':['Type1', 'Type2',...], 'Characteristics':['TypeA', 'TypeB',...], ...}

h番目

于 2012-05-04T01:12:48.040 に答える