ColdFusion可以在更少的行中实现这一点吗?
我有一个如下的查询:ColdFusion可以在更少的行中实现这一点吗?,coldfusion,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
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>
从上面的查询中选择计数(ID),其中类型='C'
做点什么
根据您希望实现的目标,这可能是可行的:
<cfif arrayFind(TheAboveQuery ['type'], 'C') gt 0>
do something
</cfif>
做点什么
您没有指定要在其上运行的CF引擎或版本。还有一些更短的方法,无论是否在其中添加换行符,都可以使它们成为一行。我要提醒你,这不是竞争,所以为了可读性,不要害怕多写几行
这是好的和整洁的,应该在Lucee服务器和Adobe 2016上工作
if( TheAboveQuery.filter( function(r){ return r.type=='C'; }).recordCount ) {
// do something
}
如果你在Lucee5上,你可以通过使用Lambda(箭头函数)而不是传统的闭包来删除更多的字符,但在这一点上你不太可能真正受益匪浅
if( TheAboveQuery.filter( (r) => return r.type=='C' ).recordCount ) {
// do something
}
可能吧,但你可能会牺牲可读性。@DanBracuk我或多或少只是好奇。我喜欢这个。我不认为它的可读性差,真的。coldfusion将查询视为数组是愚蠢的。在
arrayFind
之前,您必须使用ListFind(ValueList(TheAboveQuery.Type),“C”)
。如果“type”值大小写不一,请确保使用arrayFindNoCase
或ListFindNocase
。。。或者使用UPPER(Type)='C'
进行查询。请注意,该代码将在Adobe CF上运行,但在Lucee服务器上不会开箱即用。Lucee没有隐式地将CF查询列视为数组,而是提供了一个将其作为数组的函数:QueryColumnData()。