我正在从数据库中找到来自具有DateAdded(时间戳)列的MySQL数据库的100条记录。
我想找到一种SMART方法,在Coldfusion中显示如下记录,不会多次访问数据库。
今天: - 记录..... 昨天: - 记录..... 本周早些时候: - 记录..... 本月早些时候: - 记录..... 老年人: - 记录.....
感谢有关如何在ColdFusion中巧妙地完成这项工作的想法。
答案 0 :(得分: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#">
您可能希望使用BETWEEN
SQL运算符。请参阅: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
查询查询可能不是最有效的,但在我看来,这是表达你的意图的最简洁方式,它只是有效。
答案 1 :(得分:1)
多数数据库调用在大多数应用程序中的成本相当可忽略不计
但是,如果你按照时间desc选择所有记录并按顺序排序,这一切都可以在一次通话中完成。
当时间切换时(当它超过1天,超过2天,超过8天等)时结束当前部分
基本上你会在CF中使用DateCompare函数将DateAdd与该部分的截止点进行比较。一些伪代码:
而dateadd&lt;明天 打印记录
而dateadd&lt; 1周前 打印记录
而dateadd&lt; 1个月前 打印记录
答案 2 :(得分:1)
你必须从SQL端开始,要么是存储过程,要么是用户定义的函数,以便为每条记录添加Today / Yesterday / etc标签。
也许:
Select a, b, myFunction(DateColumn) as GroupLabel
From myTable Order By GroupLabel
myFunction获取日期值并返回Today / Yesterday / etc
答案 3 :(得分:0)
我同意尼尔。如果是我,我会在存储过程中完成所有操作,只需让DB手持CF作为输出的最终结果。