CFspreadsheet循环

我有一个关于cfspreadsheet的问题….所以我使用cfspreadshseet来创buildexcel电子表格用于报告目的。 我的页面允许用户从数据库中select任何列以包含在报告中。 所以这里是一个例子:

电子表格可能如下所示:

名字—姓氏—组织—地址—城市—国家—邮编—关注

乔史密斯样品12主要丹佛合作80513担心去这里

我的问题是,如果乔有一个以上的关注,我得到多行乔的信息…有没有办法我可以循环的关注,只有1行的乔?

谢谢,

史蒂夫

使用cfoutput的“组”function对此任务来说是完美的。 只是抛出另一种可能性,你也可以在你的数据库查询中生成列表。

例如,MySQL有GROUP_CONCATfunction。 我不知道你的表的结构,但是说你有两个表UserUserConcern ,你可以像这样使用GROUP_CONCAT把“Concern”值连接成一个string:

SQLFiddle

 SELECT u.UserID , u.FirstName , ... other columns , GROUP_CONCAT( uc.Concern ) AS ConcernList FROM UserTable u INNER JOIN UserConcern uc ON uc.UserID = u.UserID GROUP BY u.UserID , u.FirstName , ... other columns 

对于SQL Server,一个标准的技巧是使用XMLpath:

SQLFiddle

 SELECT u.UserID , u.FirstName , ... other columns , STUFF( ( SELECT ',' + uc.Concern FROM UserConcern uc WHERE uc.UserID = u.UserID ORDER BY uc.Concern FOR XML PATH('') ) , 1, 1, '' ) AS ConcernList FROM UserTable u GROUP BY u.UserID , u.FirstName , ... other columns 

然后像往常一样简单地生成电子表格。

你需要一个唯一的行ID来做到这一点,外部组与lastname,或什么,可能会导致冲突。 UserID是一个占位符variables。 确保将其replace为准确的ID名称。 当然,这些variables名称中的一些只是猜测。

 <cfoutput query ="thequery" group="UserID"> <cfset cList=""> <cfoutput group="concern"> <cfset cList=ListAppend(cList,Concern)> </cfoutput> <cfset temp = spreadsheetAddRow(my_spreadsheet,"'#fn#','#ln#',...,'#cList#'"> </cfoutput> 

假设你想为每个评论分开的行,像这样的东西会工作:

 <cfset current_id = ""> <cfloop query = "my_query"> <cfset next_id = user_id> <!--- or whatever else forms the primary key ---> <cfif next_id neq current_id> <cfset current_id = next_id> <cfset SpreadsheetAddRow(my_spreadsheet, "#first_name#,#last_name#,etc, #comment#"> <cfelse> <cfset SpreadsheetAddRow(my_spreadsheet, ",,#comment#"> </cfif> </cfloop> 

这是基于所提供的信息。 如果你有一个唯一的ID组属性会更好。