这可以在SQL本身中完成,这可能比处理代码中的数据更有效。
随着数据的一个问题是
State,
City和
Building列必须逆转置,然后被变成了逗号分隔的列表。
由于使用的是SQL 2008,因此可以访问所需的功能。
查询是:http :
//sqlfiddle.com/#!18/0f4f7/1
; WITH cte AS ( SELECt AccountID, AccessType, AccessLevel , CASE AccessLevel WHEN 'S' THEN State WHEN 'C' THEN City WHEN 'B' THEN Building END AS Permissions FROM Permissions WHERe AccountID = <cfqueryparam cfsqltype="cf_sql_integer" value="#session.AccountID#"> )SELECt DISTINCT AccountID, AccessType, AccessLevel , CASE WHEN AccessLevel = 'S' THEN Permissions ELSE LEFt(ca.pl, COALESCE(LEN(ca.pl),0)-1) END AS PermissionListFROM cteCROSS APPLY ( SELECt p.Permissions + ', ' FROM cte p WHERe p.AccountID = cte.AccountID AND p.AccessType = cte.AccessType AND p.AccessLevel = cte.AccessLevel FOR XML PATH('')) ca (pl) ;
我先从CTE开始,以建立
Permissions基于的“不可透视的”列表
AccessLevel。如果可以将其放在SQL视图中,则可以在
WHERe此处省略该语句,并在调用视图时调用它。如果可以将View放入数据库,则将是我的首选。
之后,我有CTE,我只是选择了基列(
AccountID,
AccessType和
AccessLevel,然后我
CROSSAPPLY一个逗号分隔的列表
Permissions。我用
FOR XML PATH('')构建一个逗号分隔的列表。
如果能够将其转换为视图,那将是一个简单的过程
<cfquery name="qryUserPerm" datasource="#Application.dsn#"> SELECt AccessType, AccessLevel, PermissionList FROM myPermissionsView WHERe AccountID = <cfqueryparam cfsqltype="cf_sql_integer" value="#trim(session.AccountID)#"></cfquery>
如果不是,则必须尝试在
cfquery标记内运行上述完整查询。
这应该给您返回一个数据集,例如:
| AccessType | AccessLevel | PermissionList ||------------|-------------|------------------------|| F |B | 8010, 5412, 6103, 3106 |
您只有一个结果可以使用,而不必循环。
================================================== ====================
如果您想采用代码内方法,我仍然建议您尝试使用它
cfscript来构建结构。但是,如果您可以有多个AccessLevel,则结果可能与您认为的不一样。您必须仔细检查您的数据。
local.permissionType = q2.AccessType ; local.permissionLevel = q2.AccessLevel ; switch( q2.AccessLevel ) { case "S" : local.permissionList = q2.State ; break ; case "C" : local.permissionList = ListRemoveDuplicates(ValueList(q2.City)) ; break ; case "B" : local.permissionList = ListRemoveDuplicates(ValueList(q2.Building)) ; break ; }
https://trycf.com/gist/e811ec86f0d5a52fd9ce703f897cb5aa/acf2016?theme=monokai
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)