在我的SQL数据库中,我有一个名为Date的常规日期格式列(1/1/2001 12:35:05 AM)。
如何在页面存档中显示每月和每年发布的帖子数量。
我可以理解,我需要以某种方式计算每个月的每个帖子,然后以某种方式根据计数将它分开。
我真的不能留下一个代码示例,因为我很困惑这是如何工作的。
<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>
答案 0 :(得分: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>
现在让我们把这些div东西放在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?这就是决定分组的原因。
BUT!你只完成了一半链接到下一页将得到一个像这样的精致查询:
(这只是举例来说,Coldfusion Gurus很容易)。
在链接中:
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>
(上面的查询并不准确,可能根本不起作用。但这里的想法是你转到你的链接,然后将查询细化为年和月的结果。并将它们转储出去到页面(如果你需要走这么远)。
有关cfquery / cfoutput /和SQL +日期的更多信息
Google-fu on datetime month/year group select etc.
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,它们是面包和黄油/肉和土豆/母亲所有的融化'东西'和'东西'。 (换句话说,它就是我们所有人开始并削减我们的冷灌牙的地方)。
这足以让你入门。祝你好运!
答案 1 :(得分: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