2011-08-31 53 views
1

因此,我们必须从数据库中拉出信息,并显示新闻/通告功能只有项目不是最近的才显示?

<cfquery name="announcement" datasource="#application.datasource#" dbtype="odbc"> 
SELECT top 2 * FROM NewsEvents 
WHERE type = 2 AND active = 1 AND publish_datetime <= #now()# AND show_on_home = 1 AND item_datetime >= #createOdbcDate(now())# 
ORDER BY item_datetime ASC 
</cfquery> 

我们正在试图做的是显示这些公告块中的一段HTML的,有条件的两个中的一个块不是这两个块中最近的块。

的HTML被包裹在此代码:

<cfif announcement.recordCount gt 0> 
<cfloop query="announcement"> 
<cfoutput> 
html 
</cfoutput> 
</cfloop> 
<cfelse> 
<cfoutput><p>There are currently no announcements.</p></cfoutput> 
</cfif> 

我想要的HTML的一个组成部分,只显示为BOTTOM公告,一个是不item_datetime最接近的一次。有关如何完成此任何想法?

+0

到目前为止有一些很好的建议。但是您的评论*“不是最靠近item_datetime”*可以使用一些说明。如果您的查询只返回单个记录,那么期望的结果是什么? – Leigh

回答

3

你按日期排序,所以才做这样的事情:

<cfif CurrentRow EQ 1> 
    We're showing the first record, so show some stuff. 
</cfif> 

CurrentRow总是在一个循环中提供给你显示你当前在其上查询的记录。因此,鉴于你目前的查询(以及一些由数据直接离开我的头,你会与这个产量结束了:

Record 1: August 29, 2011 
We're showing the first record, so show some stuff 

Record 2: August 30, 2011 

你按照日期排序ASC,所以最早的记录是第一次,而更新的记录是最后一个,我建议你将你的排序改为DESC,否则一旦你在前两个之后添加了第三个声明,你就永远不会获得更新的记录。在显示顺序你后。

+1

这很难破译的措辞,但可能''是想要什么? –

+0

是的,我很难整理出他们以后的样子:)。由于他们正在对ASC进行排序,因此底层会是最新的列表。 –

+0

我想知道他是否希望在两个项目之间插入一行......在这种情况下,它可能是'';-) – nykash

0

您可以将修改添加到您的CFQUERY的语句,像这样。我还要修改CFIF总记录语句来寻找超过1个记录在这一点上。

<cfif announcement.recordCount gt 1> 
    <cfoutput query="announcement" startRow="2"> 
     <!--- Throw my output here ---> 
    </cfoutput> 
<cfelse> 
    <p>There are currently no announcements.</p> 
</cfif> 
+0

其实,如果您真的想优化这个.. 。放下CFOUTPUT包装并将您的CFLOOP更改为CFOUTPUT。它的工作原理是一样的。 –