如何删除重复的内容?

时间:2014-04-06 21:33:03

标签: mysql coldfusion coldfusion-9

我正在学习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>

2 个答案:

答案 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子句中明确指定,否则不能保证任何类型的排序)