2017-08-22 206 views
1

我有一个查询,看起来像这样:ColdFusion可以在更少的行中执行此操作吗?

DATEUPLOADED    ID  TYPE 
1 2017-08-14 15:47:45.0 2405507 D 
2 2017-08-14 15:47:44.0 2405506 D 
3 2017-08-16 08:43:58.0 2407829 S 
4 2017-08-16 08:43:41.0 2407828 S 
5 2017-08-18 13:13:29.0 2411567 C 
6 2017-08-18 13:16:20.0 2411571 P 
7 2017-08-18 15:42:39.0 2411753 C 
8 2017-08-18 15:44:39.0 2411759 C 
9 2017-08-18 15:45:14.0 2411760 C 
10 2017-08-18 15:45:48.0 2411761 C 
11 2017-08-18 16:39:05.0 2411849 A 
12 2017-08-18 16:40:12.0 2411853 V 

是否有可能做少线以下:

<cfquery name="GetCount" dbtype="query" > 
    SELECT COUNT(ID) FROM TheAboveQuery WHERE Type = 'C' 
</cfquery> 

<cfif GetCount.RecordCount gt 0 > 
    Do something 
</cfif> 
+0

也许,但你可能会牺牲可读性。 –

+0

@DanBracuk我或多或少只是好奇而已。 –

回答

1

取决于你在找什么来实现的,这可能是好的:

<cfif arrayFind(TheAboveQuery ['type'], 'C') gt 0> 
do something 
</cfif> 
+0

我喜欢这个。我不认为它的可读性不好,真的。虽然Coldfusion将查询视为一个数组,但很愚蠢。 –

+0

'arrayFind'之前,你必须使用'ListFind(ValueList(TheAboveQuery.Type),“C”)'。如果“类型”值是混合大小写,请务必使用'arrayFindNoCase'或'ListFindNocase' ...或使用'UPPER(Type)='C''来查询查询。 –

+0

请注意,该代码可以在Adobe CF上运行,但不能在Lucee Server上使用。而不是隐式地将CF查询列视为一个数组,Lucee有一个函数可以将它作为一个数组来使用:QueryColumnData()。 –

2

您没有指定您需要运行的CF引擎或版本。还有一些更短的方法,不管你是否在其中添加换行符都可以使它们成为一行。我会提醒的是,这不是一场竞赛,所以不要为了可读性而担心一些额外的行数!

这是很好的整洁,并应Lucee服务器上运行和Adobe 2016

if(TheAboveQuery.filter(function(r){ return r.type=='C'; }).recordCount) { 
    // do something 
} 
代替

如果你在Lucee 5,您可以通过使用Lambda(箭头功能)刮掉几个字符的传统封闭,但在这一点上你不太可能真正受益。

if(TheAboveQuery.filter((r) => return r.type=='C').recordCount) { 
    // do something 
} 
+0

我在cf10上,但这非常漂亮。 –

相关问题