1

このコードを使用して、プラットフォームのリストを表示しています。ページに入るときにplatformIDが指定されている場合は、指定されたプラットフォームの下にジャンルのリストを作成したいと思います。

  1. ブラウズ.cfmは、1のプラットフォームIDを指定したリンクを介してアクセスされました
  2. ブラウズ.cfmは利用可能なすべてのプラットフォームを一覧表示します
  3. ブラウズ.cfmは、platformID1で利用可能なすべてのジャンルを一覧表示します。

    <ul>
        <li>Browse</li>
        <cfoutput query="qGetPlatforms">
        <li>
            <a href="browse.cfm?platformID=#URLEncodedFormat(Trim(qGetPlatforms.platformID))#">#qGetPlatforms.pName#</a>
            <cfif URL.platformID EQ qGetPlatforms.platformID>
            <ul>
                <cfoutput query="qGetGenres">
                <li><a href="browse.cfm?genreID=#URLEncodedFormat(Trim(qGetGenres.genreID))#">#qGetGenres.gName#</a></li>
                </cfoutput>
            </ul>
            </cfif>
        </li>
        </cfoutput>
    </ul>
    

ただし、このアプローチを使用すると、無効なネスト構成が取得されます。これを修正するにはどうすればよいですか?または、同じアイデアを実現するための別のアプローチはありますか?

ありがとう

私の質問:

<!---Get platforms--->
<cffunction
    name="fGetPlatforms"
    access="public"
    returntype="query"
    output="false"
    hint="I get all the platforms">
    <!---Local var--->
    <cfset qGetPlatforms = "">
    <!---Database query--->
    <cfquery name="qGetPlatforms" datasource="#REQUEST.datasource#">
    SELECT 
        platforms.platformID,
        platforms.platformName AS pName
    FROM
        platforms
    </cfquery>
    <cfreturn qGetPlatforms>
</cffunction>    

<!---Get genres--->
<cffunction
    name="fGetGenres"
    access="public"
    returntype="query"
    output="false"
    hint="I get all the genres">
    <!---Local var--->
    <cfset qGetGenres = "">
    <!---Database query--->
    <cfquery name="qGetGenres" datasource="#REQUEST.datasource#">
    SELECT 
        genres.genreID,
        genres.genreName AS gName
    FROM
        genres
    </cfquery>
    <cfreturn qGetGenres>
</cffunction>
4

2 に答える 2

3

を使用<cfloop query="qGetGenres"></cfloop>でき、ネストできます。

IMO、クエリのループにcfoutputを使用するのは古いスタイルであり、避ける必要があります。出力にはcfoutputを使用し、ループにはcfloopを使用すると、より読みやすいコードが得られます。

于 2010-07-12T17:53:00.100 に答える
2

2つのテーブル間の内部結合を使用し、1つのクエリですべてを結合して取得し、cfoutputのgroup属性を使用して結果を表示することをお勧めします。

<cfset URL.platformID = int(val(URL.platformID))>

<cfquery name="getPlatformsAndGenres" datasource="#REQUEST.datasource#">
SELECT
    p.platformID AS platformID
    ,p.platformName AS pName
    ,g.genreID AS genreID
    ,g.genreName AS gName
FROM
    platforms p
    INNER JOIN genres g
        ON p.platformID = g.platformID
WHERE
    p.platformID = <cfqueryparam cfsqltype="cf_sql_integer" value="#URL.platformID#">
ORDER BY
    pName
    ,genreName
</cfquery>

Once you have everything in one query, you can use <cfoutput query="getPlatformsAndGenres" group="pName">
to lessen your code:

<ul>
    <li>Browse</li>
    <cfoutput query="getPlatformsAndGenres" group="pName">
    <li>
        <a href="browse.cfm?platformID=#URLEncodedFormat(Trim(platformID))#">#pName#</a>
        <ul>
            <cfoutput>
            <li><a href="browse.cfm?genreID=#URLEncodedFormat(Trim(genreID))#">#gName#</a></li>
            </cfoutput>
        </ul>
        </cfif>
    </li>
    </cfoutput>
</ul>
于 2010-07-13T16:22:14.953 に答える