2010-01-01 26 views
1

我正在爲具有DateAdded(timestamp)列的MySQL DB中的100條記錄創建數據庫。Coldfusion,輸出按日期分組,今天,昨天,本週等分組的SQL結果

我想找到一種智能的方式來顯示Coldfusion中的記錄,如下所示,無需多次觸擊數據庫。

今天: - 記錄..... 昨日: - 記錄..... 本週早些時候: - 記錄..... 本月初: - 記錄.... 上一個: - 記錄.....

感謝您關於如何在ColdFusion中巧妙完成這個想法。

回答

2

查詢的查詢? - http://livedocs.adobe.com/coldfusion/8/htmldocs/using_recordsets_3.html#1157970

<h1>Today:</h1> 
<cfquery name="todayRecords" dbtype="query"> 
    select * 
    from originalQuery 
    where DateAdded = #createODBCDate(year(now()), month(now()), day(now()))# 
</CFQUERY> 
<cfdump var="#todayRecords#"> 

您可能需要使用SQL BETWEEN操作。請參閱:http://livedocs.adobe.com/coldfusion/8/htmldocs/using_recordsets_7.html

您也可以使用<cfqueryparam>標記。請參閱:http://livedocs.adobe.com/coldfusion/8/htmldocs/Tags_p-q_18.html#1102474

查詢查詢可能不是最有效的,但在我看來,它是最簡潔的方式來表示您的意圖,它只是起作用。

+0

如果該列確實是一個時間戳,並且包含日期和時間,則直接相等比較將不起作用。以範圍檢查(或截斷的時間)將需要 WHERE DateAdded <=#TodayAtMidnight#AND DateAdded <#TomorrowAtMidnight# – Leigh 2010-01-01 21:50:20

+0

編輯功能似乎並不奏效。更正: WHERE DateAdded> =#TodayAtMidnight#AND Date Added <#TomorrowAtMidnight# – Leigh 2010-01-01 21:56:27

+0

@Leigh,是的,你可以使用BETWEEN – Henry 2010-01-04 07:23:08

1

多個數據庫調用將在大多數應用

一個相當微不足道的成本,但是,這都可以在一個呼叫來完成,如果你selet的所有記錄,以便按時間倒序。

結束當前部分時,定時開關(當它成爲超過1天,早於2天后,年齡超過8天,等)

基本上你會用DateCompare功能CF來使用DateAdd比較到部分的截止點。一些僞代碼:

今天

而DATEADD <明天 打印記錄

昨天

而DATEADD < 1個星期前 打印本週戰績

早期

而DATEADD < 1個月前 打印記錄

+0

如何在Coldfusion中優雅地切換? – AnApprentice 2010-01-01 01:09:28

+0

您可以通過保留一個跟蹤您所在部分的變量來製作「開關」。當該部分不再與「LastSection」匹配時,創建下一個標題。 – 2010-01-01 01:13:32

+0

Neil你能否在CF中提供一個示例來說明循環如何工作? – AnApprentice 2010-01-01 01:15:58

1

您必須從SQL端開始,可以是Store Procedure或User Defined函數以將Today/Yesterday/etc標籤添加到每條記錄。

也許:

Select a, b, myFunction(DateColumn) as GroupLabel 
From myTable Order By GroupLabel 

如果myFunction的發生日期值,並返回今天/昨天的/ etc

+0

爲什麼這會降低投票率? – 2010-01-01 01:23:29

+0

這是一個很好的方法,也適用於直接針對數據庫設計的任何即席報告。 – Antony 2010-01-01 06:47:54

0

我同意尼爾。如果是我,我會在存儲過程中完成所有操作,然後讓數據庫手持CF輸出的最終結果。

相關問題