我正在学习ColdFusion。我想展示一篇文章和3张图片。我的代码编译,但它显示文章3次和3张图片。我只想一次展示这篇文章。有人可以看看我的代码并给我一个提示吗?谢谢你的时间!
<html>
<head>
<title>Hello</title>
</head>
<body>
<h3>Full Article View</h3>
<CFQUERY NAME="myQuery1" Datasource="mydb" >
SELECT *
FROM articles
INNER JOIN article_image_mapping ON articles.article_ID = article_image_mapping.aim_articleID
INNER JOIN images ON aim_imageID = images.image_ID
WHERE articles.article_ID = #URL.ID#
</CFQUERY>
<div align="left">
<cfoutput query="myQuery1">
#ucase(myquery1.article_title)# <br/>
-------------------------------------<br>
#myquery1.article_author# :: #myquery1.article_date#<br/>
#myquery1.article_content#<br/>
#myquery1.image_thumbpath#<br/>
</cfoutput>
</div>
</body>
</html>
答案 0 :(得分:2)
您需要在查询中使用group
属性,并在查询中添加ORDER BY
。我还建议只列出SELECT语句中所需的列
<CFQUERY NAME="myQuery1" Datasource="mydb" >
SELECT article_title, article_author, article_content, image_thumpath
FROM articles
INNER JOIN article_image_mapping ON articles.article_ID = article_image_mapping.aim_articleID
INNER JOIN images ON aim_imageID = images.image_ID
WHERE articles.article_ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#URL.ID#">
ORDER BY article_title <!--- this is important! --->
</CFQUERY>
<div align="left">
<cfoutput query="myQuery1" group="article_title"><!--- show the article_title once --->
#ucase(myquery1.article_title)# <br/>
-------------------------------------<br>
<cfoutput><!--- loop through all results with same article title --->
#myquery1.article_author# :: #myquery1.article_date#<br/>
#myquery1.article_content#<br/>
#myquery1.image_thumbpath#<br/>
</cfoutput>
</cfoutput>
</div>
答案 1 :(得分:0)
马特没错,您正在寻找group
中的cfoutput
属性。虽然我认为内部cfoutput
循环的位置并不是您想要的。我想这就是你想要完成的事情。
<!--- use the group attribute to show the article once --->
<cfoutput query="myQuery1" group="article_id">
#ucase(myquery1.article_title)# <br/>
-------------------------------------<br>
#myquery1.article_author# :: #myquery1.article_date#<br/>
#myquery1.article_content#<br/>
<!--- use an inner cfoutput to loop over the associated images --->
<cfoutput>
#myquery1.image_thumbpath#<br/>
</cfoutput>
</cfoutput>
内部cfoutput
内的任何内容都会为查询中的每条记录显示一条内容。外部cfoutput
中的项目(包含组属性)每个组只显示一次,因此如果您的组是article_id,则只会为给定的article_id显示一次。
在这种特殊情况下,你应该只在文章表中有一条记录,所以你不必担心排序顺序,因为图像将全部附加到该记录,并且应该导致它们发生在结果查询中彼此相关*。但是,如果你打算在其他专栏上进行分组,那么Matt就是正确的,你需要确保你的记录正确排序 - 如果分组记录在查询中不是彼此相邻,那么他们就赢了“ t在输出中分组。
无关:我还建议cfqueryparam
用于上面cfquery
中的article_id,因为数字列特别容易受到SQL injection attacks的影响。
(*只要您没有做像image_thumbpath列排序那样奇怪的事情 - 虽然从技术上讲,SQL的标准说除非您在order by子句中明确指定,否则不能保证任何类型的排序)