2014-04-06 95 views
0

在我的SQL數據庫中,我有一個名爲Date的常規日期格式的列(2001/1/1 12:35:05 AM)。在Coldfusion中編寫月度歸檔文件

如何在一個頁面檔案中顯示每月和每年發佈的帖子數量。

我可以理解,我需要以某種方式計算每個月的每個帖子,然後以某種方式使它基於計算的年份分開。

我真的不能留下代碼示例,因爲我很困惑這將如何工作。

<div class="leftbracketholder"> 

<div class="leftboxes"> 
    <li><A Href="Fish.com">0</a></li> 


</div> 

<cfquery name="Archive" datasource="FishingRackets"> Select Date From Posts </cfquery>

回答

3

讓我看看我能不能幫上您的問題線索。

首先你有一些事情正在進行,所以讓我們簡化它們。

要生成的報告可用於查看和要顯示該報告:每年

總計按月,是否正確?所以我們需要一個很好的SQL select語句。

然後,您正在使用cfquery將查詢發送到數據庫並返回數據以供使用。

那麼您需要使用cfoutput以有意義的方式輸出數據。

因此,讓我們使用一些假設(基於提供的有限代碼)。 SQL:從帖子中選擇日期不會對你有用(免責聲明:我不知道你具體的SQL變種,所以這是一個愚蠢的未經測試的例子,讓你思考)。

你說你有一個固定的日期字段。我假設這是一個日期時間字段。

所以你可以做的一件事是創建一個按日期時間計數,並按月和年。

select month(dateField) as month, year(dateField) as year 
    from posts 
order by month, year 

下使調整CFQUERY的東西...

<cfquery name="archive" datasource="fishingRackets"> 
select month(dateField) as month, year(dateField) as year 
    from posts 
order by month, year 
</cfquery> 

現在讓該分區的東西和CFOUTPUT下舉辦的。請注意,cfoutput在數據上循環,並且更好地爲您分組。

所以如果你需要按月一年就畢業了,你能做到幾個方面:

<div> 

<cfoutput query="archive" group="year"> 
<h2>#year#</h2> 

<cfoutput> 
<div> 
<li><a href="yourlinkhere.com/somepage.cfm?month=#month#&year=#year#">#month#/#year#</a></li> 
</div> 
</cfoutput> 

<cfoutput> 
</div> 

你看到另一個CFOUTPUT內部的CFOUTPUT?這就是決定分組的原因。

但是!你只有一半的鏈接到下一頁會得到你這樣一個精緻的查詢:

(這只是例如,所以Coldfusion的大師變得容易)。

在鏈接:

yourlinkhere.com/somepage.cfm?month=#month#&year=#year# 

你可以抓住那些URL變量和解決這樣的SQL:

<cfquery name="archive" datasource="fishingRackets"> 
select month(dateField) as month, year(dateField) as year 
    from posts 
WHERE DATEPART(mm, Date) = #url.month# 
    AND DATEPART(yyyy, Date) = #url.year# 
order by month, year 
</cfquery> 

(上面的查詢不準確,它可能無法工作。但這裏的想法是,你去你的鏈接,你細化查詢只是在年和月的結果,並將其轉儲到頁面(如果你需要走這麼遠)。在cfquer上Y/CFOUTPUT /和SQL +日期

Google-fu on datetime month/year group select etc.

cfquery stuff

See this post on another type of group example (basically what I created above with more detail).

See more on your handy-dandy cfoutput tag here.

最後的想法:瞭解SQL,CFQUERY和CFOUTPUT,他們是麪包和 - 蛋糕/肉和土豆/母親所有coldfusion'東西'和'東西'。 (換句話說,這是我們所有人開始並切開我們的coldfusion牙齒的地方)。

這應該足以讓你開始。祝你好運!

+0

我已將它粘貼到我的頁面中。並以錯誤執行數據庫查詢結束。 '[Macromedia] [SequeLink JDBC Driver] [ODBC Socket] [Microsoft] [ODBC Microsoft Access Driver]參數太少。預計2.'我嘗試將別名更改爲「月」和「年」,因爲它看起來像年和月是保留的,但並沒有改變錯誤。 –

+0

請注意,我說我不知道​​你的SQL風格是什麼:你剛纔說的一個SQL數據庫...是MySQL還是SQL Server?等等 –

+0

啊哈...訪問...好吧,這是一個不同的鳥(就像我說的SQL不會是正確的)。所以這是我的建議。在訪問中,您可以使用GUI界面來構建簡單的查詢。您可以像我在做的那樣過濾這些查詢,並像下面的海報所做的那樣。但是你將需要深入挖掘你的日期類型。什麼是可用的,什麼是允許的,並查看那些特定的SQL示例。你可能會很幸運,找到ColdFusion的cfquery MSAccess日期過濾示例。 –

0

此查詢會爲您找到您要找的內容。從那裏通過循環查詢應該很容易輸出到頁面。

SELECT month(date) as month, year(date) as year, count(post_id) as posts 
FROM posts 
WHERE date BETWEEN <cfqueryparam cfsqltype="cf_sql_date" value="startDate"> 
    AND <cfqueryparam cfsqltype="cf_sql_date" value="endDate"> 
GROUP BY month(date), year(date) 
ORDER BY year, month 
+0

我故意跳過參數化sqltypes。這傢伙從「基礎知識」開始,我不想將他與「最佳實踐」混爲一談。您的查詢看起來不錯,但... –

+1

「基礎知識」應該包括「最佳實踐」。另外,您的建議不應該是「錯誤的」,並且將數據值硬編碼到SQL語句中是非常錯誤的。 –

+0

如果日期字段包含時間分量,則關鍵字「之間」可能會導致您錯過某些記錄。 –