我正在使用此代码显示平台列表。如果在进入页面时指定了platformID,我想在指定平台下创建一个类型列表。
browse.cfm现在将列出platformID为1下的所有可用类型。
<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>
答案 0 :(得分:3)
您可以使用<cfloop query="qGetGenres"></cfloop>
,它们可以嵌套。
IMO,使用cfoutput循环查询是旧样式,应该避免。使用cfoutput作为输出,使用cfloop进行循环,你将拥有更多可读代码。
答案 1 :(得分:2)
更多值得思考的是在两个表之间使用内部联接,在一个查询中组合并检索所有内容,然后使用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>