2013-07-22 1 views
-2

Я выполняю следующий запрос и QoQ. Не могли бы вы рассказать мне, как мне перейти к опции «Загрузить CSV»?, работающий с 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> 

Желаемая Выход:

Я приложил image для выхода ниже. Пожалуйста, прикрепите его.

В принципе, если диапазон дат 21 июня - 21 июля. Выход должен быть таким, как показано на изображении. (Я просто пропустил THIRDCONN и т. Д. Для простоты моего кода).

Я попытался выполнить описанную выше проблему. Нужно ли писать файлContent.append() для каждого столбца? Пожалуйста, дайте мне знать, если я ошибаюсь.

P.S. Я новичок в CF и раньше этого не делал.

Благодаря

+0

Так что вы хотите, чтобы генерировать данные в формате CSV из набора записей? Является ли все вышеупомянутый bumpf в основном очень длинным способом просить об этом? –

+0

Да, я хочу создать CSV, когда пользователь нажимает кнопку Загрузить. – Tan

+0

Нет, нет. «создание CSV-данных из набора записей» - вопрос переполнения стека; «как мне закончить писать мой код для этой конкретной работы» - это вымогательство бесплатной консультации. Вам нужно сделать свою работу. И чтобы выполнить свою работу, вам нужно разбить задачу на общие части. Первый фрагмент: вам нужно знать, как создавать CSV-данные из набора записей. Даже «этот конкретный набор записей», а общее решение для «recordset to CSV». Я предлагаю вам начать с googling «cfml query to csv». –

ответ

0

Использование отдельных запросов делает это намного сложнее, чем это необходимо. Для его работы вам по существу нужно pivot или транспонировать строки каждый запрос в отдельные столбцы. Нелегкая задача, если все ваши запросы не будут содержать точно такие же даты, в том же порядке (маловероятно).

Если у вас есть фиксированное количество событий, то много проще использовать один запрос базы данных для генерации всех подсчетов. Используйте CASE заявления для построения счетчиков на основе значения «События»:

(Примечание:. Это не может быть сделано внутри предыдущего квартала Они не поддерживают CASE).

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') 

После того, как вы получите все результаты по одному запросу, вы можете сделать все остальное самостоятельно. Как упоминал Адам, просто выполните поиск по запросу ColdFusion в csv. Есть тонн примеров вы можете следовать, а также ряд готовых функций для преобразования запросов в формате CSV:

+0

Спасибо за разъяснение. Вопрос только в том, что запрос в CSV означает, что данные будут выводиться в листе Excel? Или мне нужно посмотреть опцию cfspreadsheet? Просто хотел убедиться, что я направляюсь в правильном направлении. – Tan

+1

Нет, CSV означает ... [Формат CSV] (http://en.wikipedia.org/wiki/Comma-separated_values#Example). Программа, назначенная для открытия файлов .csv, зависит от пользователя. Обычно Excel, но это может быть и другая программа. – Leigh

+0

Спасибо за разъяснение. Пожалуйста, взгляните на мой обновленный код. – Tan

 Смежные вопросы

  • Нет связанных вопросов^_^