Coldfusion 使用CSV

Coldfusion 使用CSV,coldfusion,coldfusion-8,cfml,Coldfusion,Coldfusion 8,Cfml,我正在运行以下查询和QoQ。您能告诉我如何进行“下载CSV”文件选项吗 <!--- QoQ for FIRSTCONN ---> <cfquery datasource = "XX.XX.X.XX" name="master1"> SELECT STR_TO_DATE(date_format(Timedetail,'%m-%d-%Y'),'%m-%d-%Y') as FIRSTCONN , COUNT(Timedetail) as FI

我正在运行以下查询和QoQ。您能告诉我如何进行“下载CSV”文件选项吗

<!--- QoQ for FIRSTCONN --->

<cfquery datasource = "XX.XX.X.XX" name="master1">
     SELECT STR_TO_DATE(date_format(Timedetail,'%m-%d-%Y'),'%m-%d-%Y') as FIRSTCONN
            , COUNT(Timedetail) as FIRSTOccurances
            , EVENTS 
     FROM  MyDatabase
     WHERE EVENTS = "FIRST" 
     GROUP BY FIRSTCONN ;
</cfquery> 

<!--- Detail Query --->

<cfquery dbtype="query" name="detail1">
    SELECT  *
    FROM master1 
    WHERE FIRSTCONN  >= <cfqueryparam value="#form.startdate#" cfsqltype="cf_sql_varchar"> 
    AND   FIRSTCONN  <  <cfqueryparam value="#dateAdd('d', 1,form.enddate)#" cfsqltype="cf_sql_varchar">;
</cfquery>  


<!--- QoQ for SECONDCONN --->

<cfquery datasource = "XX.XX.X.XX" name="master2">
    SELECT STR_TO_DATE(date_format(Timedetail,'%m-%d-%Y'),'%m-%d-%Y') as SECONDCONN
           , COUNT(Timedetail) as SECONDOccurances
           , EVENTS 
    FROM  MyDatabase
    WHERE EVENTS = "SECOND" 
    GROUP BY SECONDCONN ;
</cfquery> 


<cfquery dbtype="query" name="detail2">
    SELECT  *
    FROM   master2 
    WHERE  SECONDCONN  >= <cfqueryparam value="#form.startdate#" cfsqltype="cf_sql_varchar"> 
    AND    SECONDCONN  <  <cfqueryparam value="#dateAdd('d', 1,form.enddate)#" cfsqltype="cf_sql_varchar">;
</cfquery>  


<cfchart format="flash"  chartwidth="1000" chartheight="500" scalefrom="0" scaleto="50000" xAxisTitle="Dates" yaxistitle="Number of Connections">
     <cfchartseries  query="detail1" type="line" itemColumn="FIRSTCONN" valueColumn="FIRSTOccurances" > 
     <cfchartseries  query="detail2" type="line" itemColumn="SECONDCONN" valueColumn="SECONDOccurances" > 
     </cfchartseries>
</cfchart>[/CODE]

The cfform code and cfscript code I'm using is as follows:

[CODE]<cfform format="flash" preloader ="false">


<cfformgroup type="horizontal">

  <cfinput type="dateField" name="startdate" label="Start Date" width="100" value="#form.startdate#">
  <cfinput type="dateField" name="enddate" label="End Date" width="100" value="#form.enddate#">
  <cfinput name="submitApply" type="submit" value = "Apply">
  <cfinput name="cancel" type="submit" value="Download CSV">

</cfformgroup>


<cfscript>
    var tl ='';
    var nl = (Chr( 13 ) & Chr( 10 ));
    var fileContent = createObject("java","java.lang.StringBuffer").init();
    var counter =1;
    fileContent.append( 'FIRST');
     fileContent.append(nl);
            for(i=1;i<=detail1.recordCount;i=i+1){
                tl = detail1.FIRST;
                fileContent.append(tl);
                fileContent.append(nl);
            }




  fileContent.append( 'SECOND');
     fileContent.append(nl);
            for(i=1;i<=detail2.recordCount;i=i+1){
                tl = detail2.SECOND;
                fileContent.append(tl);
                fileContent.append(nl);
            }           

</cfscript>

<cfset absoluteFilePathAndName = " C:\ColdFusion8\runtime\servers\coldfusion\SERVER-INF\temp\wwwroot-tmp\">

<cfset realtiveFilePathAndName = " C:\ColdFusion8\runtime\servers\coldfusion\SERVER-INF\temp\wwwroot-tmp\">

<cffile action="write" file="#absoluteFilePathAndName#" output="#fileContent.toString()#"/>
<a href="#realtiveFilePathAndName#>Download</a> 

选择STR_TO_DATE(日期格式(时间详细信息,'%m-%d-%Y'),'%m-%d-%Y')作为FIRSTCONN
,将(时间细节)计为首次发生
,事件
从MyDatabase
WHERE EVENTS=“FIRST”
FIRSTCONN分组;
挑选*
来自master1
FIRSTCONN>=
和FIRSTCONN;
选择STR_TO_DATE(日期格式(时间详细信息,'%m-%d-%Y'),'%m-%d-%Y')作为第二连接
,将(时间详细信息)计为次要事件
,事件
从MyDatabase
WHERE EVENTS=“SECOND”
第二组;
挑选*
来自master2
其中SECONDCONN>=
和第二康;
[/CODE]
我使用的cfform代码和cfscript代码如下:
[守则]
var-tl='';
变量nl=(Chr(13)和Chr(10));
var fileContent=createObject(“java”,“java.lang.StringBuffer”).init();
var计数器=1;
追加('FIRST');
fileContent.append(nl);
对于(i=1;i,使用单独的查询比必要的要困难得多。要使其正常工作,您基本上需要将每个查询的行转换为单独的列。这不是一项容易的任务,除非您的所有查询都保证以相同的顺序包含完全相同的日期(不太可能)

如果有固定数量的事件,则使用单个数据库查询生成所有计数要简单得多。使用语句根据“事件”值生成计数:

(注意:此不能在QoQ内完成。它们不支持
案例

选择STR_TO_DATE(日期格式(时间细节,'%m-%d-%Y'),'%m-%d-%Y')作为日期
,SUM(事件='First'然后1 ELSE 0 END时的情况)作为FirstConn
,SUM(当事件='Second'然后1 ELSE 0结束时的情况)作为SecondConn
,求和(事件为'Third'然后为1,否则为0结束时的情况)为第三个
从你的表名
其中Timedetail>=
和时间细节
按字符串分组到日期(日期格式(时间详细信息,'%m-%d-%Y'),'%m-%d-%Y'))
在一个查询中获得所有结果后,您可以自己完成其余的操作。如Adam所述,只需搜索ColdFusion query to csv。您可以遵循大量示例,以及许多用于将查询转换为csv的预构建函数:


那么你想从一个记录集生成CSV数据吗?以上所有的bumpf基本上都是一种冗长的提问方式吗?是的,我想在用户单击下载按钮时生成CSV。否。“从一个记录集创建CSV数据”是一个堆栈溢出问题;“我如何完成这项特定工作的代码编写?”正在寻求免费咨询。你需要做你自己的工作。要做你自己的工作,你需要将手头的任务分解成一般的块。第一块:你需要知道如何从记录集创建CSV数据。甚至不是“这个特定的记录集”,而是“记录集到CSV”的一般解决方案。我建议你从谷歌搜索开始“cfml查询到csv”。如果你正确查看我的代码并就此提出问题,我会写一个cfml脚本。你想让我做更多的研究吗?你应该从摆脱所有与a无关的垃圾开始)包含您要转换为CSV的数据的记录集;b)创建CSV数据的代码。您的问题不需要表单、图表、HTML和所有这些东西。只需从记录集开始。然后找出如何从中生成CSV数据(我看上面没有这样做的代码……您可能还需要查找CSV数据的外观).如我所说,将总体需求分解为几块,并解决每一块。在学习如何处理每一块的同时,不要担心全局。感谢您的澄清。仅一个问题,查询CSV是否意味着数据将输出到Excel表格?还是我需要查看cfspreadsheet选项?我只是想知道确保我的方向正确。不,CSV意味着…分配给打开.CSV文件的程序由用户决定。通常是Excel,但也可能是不同的程序。感谢澄清。请查看我的更新代码。请忽略我以前的注释和代码。我已找到解决此问题的其他方法现在在我的输出中获得CSV生成的代码。Thanks@Tan-Yikes!尽量不要删除问题并用全新的问题替换它们..因为现在上面的答案毫无意义!:)而是进行一些小的更新/编辑。如果有重大变化,最好打开一个单独的问题。但不要忘了关闭旧的o仅供参考:我已经回滚了原始问题以保留此线程的上下文。
 SELECT STR_TO_DATE(date_format(Timedetail,'%m-%d-%Y'),'%m-%d-%Y') as TheDate
        , SUM( CASE WHEN EVENTS = 'First' THEN 1 ELSE 0 END ) AS FirstConn
        , SUM( CASE WHEN EVENTS = 'Second' THEN 1 ELSE 0 END ) AS SecondConn
        , SUM( CASE WHEN EVENTS = 'Third' THEN 1 ELSE 0 END ) AS ThirdConn
 FROM  YourTableName
 WHERE Timedetail  >= <cfqueryparam value="#form.startdate#" cfsqltype="cf_sql_date"> 
 AND   Timedetail  <  <cfqueryparam value="#dateAdd('d', 1,form.enddate)#" cfsqltype="cf_sql_date">
 GROUP BY STR_TO_DATE(date_format(Timedetail,'%m-%d-%Y'),'%m-%d-%Y')