2011-08-31 49 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。它的工作原理是一樣的。 –